2012-03-13 108 views
4

我正在加載一個XML文件配置的類,這個類從XMLConfiguration擴展。如何從SubnodeConfiguration中檢索xml屬性?

配置文件看起來是這樣的:

<?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); 

     } 
    } 

的代碼工作正常,但問題是得到每個<message>元素的id屬性,我不知道如何檢索它。 SubnodeConfiguration的getter都沒有提供這個,或者,我沒有以正確的方式去做。

任何幫助將不勝感激。

+0

好吧,我發現它。我如何找到它,我已經遍歷getKeys()枚舉器,如下所示: Iterator iter = messageBean.getKeys(); 對象值; (iter.hasxt()) { value =(iter.next()); System.out.println(value.toString()); } 這樣做,我注意到,要訪問屬性「ID」,我必須這樣做,如下所示: messageBean.getString(「message [@id]」) 希望這有助於如果有人正在尋找它。 Fer – 2012-03-13 16:57:06

回答

5

我看到您的評論,但它也在documentation here。 SubnodeConfiguration擴展了HierarchicalConfiguration。

此外,如果您使用方法HierarchicalConfiguration.configurationsAt()檢索配置,並且您檢索的節點本身具有屬性,則只需使用方括號+ @表示法訪問它即可。例如:

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,非常有幫助 – 2012-04-19 13:56:57

+0

如果我不知道'foo'鍵的名字,我怎麼能得到'bar'attibute的所有值。 – 2015-12-18 08:20:53

+0

@jetma Dunno。 3.5年的時間太長,無法回想起這件事。 JavaDoc應該告訴你,或者你可以調試和播放。 :-) – 2015-12-25 15:48:41