2012-03-13 110 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