如何从SubnodeConfiguration检索xml属性?

Fer*_*ano 4 java xml-configuration

我正在开一个类来加载XML文件配置,这个类扩展自XMLConfiguration.

配置文件如下所示:

<?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>
Run Code Online (Sandbox Code Playgroud)

我迭代这个和加载的方式如下:

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

      }
   }
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但问题是获取id每个<message>元素的属性,我不知道如何检索它.SubnodeConfiguration的getter都没有提供这个,或者也许,我没有以正确的方式做到这一点.

任何帮助将不胜感激.

Spe*_*mos 6

我看到你的评论,但它也在这里文档中.SubnodeConfiguration扩展了HierarchicalConfiguration.

此外,如果使用方法HierarchicalConfiguration.configurationsAt()检索配置,并且您正在检索的节点本身具有属性,则只需使用方括号+ @表示法访问它.例如:

XML:

<foos>
  <foo bar='bazz'/>
  <foo bar='bizz'/>
  <foo bar='buzz'/>
</foos>
Run Code Online (Sandbox Code Playgroud)

Java的:

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

应打印:

bazz
bizz
buzz
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样可能自动认为预期表达引擎是XPath的人来说只是一个注释 - 事实并非如此.如果您正在使用XPath引擎,则需要省略属性名称周围的括号. (4认同)