2012-03-13 5 views
4

Я работаю над классом для загрузки конфигурации файла XML, и этот класс распространяется от XMLConfiguration.Как получить атрибут xml из SubnodeConfiguration?

Файл конфигурации выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <global> 
     <reloadInterval>5</reloadInterval> 
    </global> 

    <definitions> 
     <definition> 
      <id>1</id> 
      <name>Test name</name> 
      <messages> 
       <message id="1">Help menu opt 1</message> 
       <message id="2">Help menu opt 2</message> 
       <message id="3">Help menu opt 3</message> 
      </messages> 
     </definition> 
    </definitions> 
</root> 

Путь я итерация это и нагрузка следующим образом:

private void updateDefinitions() 
    { 
     this.definitions.clear(); 

     List<SubnodeConfiguration> lstDefinitions = getListConfig("definitions"); 
     for(SubnodeConfiguration definition : lstDefinitions) 
     { 
     DefinitionBean aDefinition = new DefinitionBean(); 

     aDefinition.setId(definition.getInt("Definition.id", -1)); 
     aDefinition.setName(definition.getString("Definition.name", "")); 

     List<MessageBean> messages = new ArrayList<MessageBean>(); 
     List<SubnodeConfiguration> lstMessages = definition.configurationsAt("definition.messages"); 
     for(SubnodeConfiguration messageBean : lstMessages) 
     { 
      MessageBean message = new MessageBean(); 

      message.setId(messageBean.getString("message")); 
      messages.add(message); 
     } 

     definition.setMessages(messages); 
     this.definitions.put(aDefinition.getId(), aDefinition); 

     } 
    } 

код работает отлично, однако, проблема заключается в получите атрибут id для каждого элемента <message>, я не знаю, как его получить. Ни один из получателей для SubnodeConfiguration не дает этого, или, может быть, я не делаю это правильно.

Любая помощь будет оценена по достоинству.

+0

Хорошо, я нашел его. Как я его нашел, я перечислил через счетчик getKeys() следующим образом: Iterator iter = messageBean.getKeys(); Значение объекта; while (iter.hasNext()) { value = (iter.next()); System.out.println (значение.toString()); }} Выполнение этого, я заметил, что для доступа к атрибуту «id» я должен сделать это следующим образом: messageBean.getString («message [@id]») Надеюсь, это поможет, если кто-то ищет Это. Fer –

ответ

5

Я вижу ваш комментарий, но он также находится в documentation here. SubnodeConfiguration расширяет иерархическую конфигурацию.

Кроме того, если вы извлекаете конфигурацию с использованием метода HierarchicalConfiguration.configurationsAt() и узла, который вы извлекаете, у него есть атрибуты, вы просто получаете его с квадратной скобкой + @ notation. Например:

Xml:

<foos> 
    <foo bar='bazz'/> 
    <foo bar='bizz'/> 
    <foo bar='buzz'/> 
</foos> 

Java:

// load xml into config 
XmlConfiguration config = ... 
List<HierarchicalConfiguration> foos = config.configurationsAt("foo"); 
for (HierarchicalConfiguration foo : foos) { 
    System.out.println(foo.getString("[@bar]")); 
} 

Если печать:

bazz 
bizz 
buzz 
+0

Большое спасибо @Spencer, очень полезно –

+0

Если я не знаю имя ключа «foo», как я могу получить все значения «bar» attibute. –

+0

@jetma Dunno. 3,5 года слишком долго вспоминать что-либо для этого. JavaDoc должен сказать вам, или вы можете просто отлаживать и играть. :-) –