使用apache commons配置xpath查询带有属性的空XML元素

时间:2012-01-11 21:42:41

标签: java xml xpath apache-commons apache-commons-config

我正在使用带有XPATH表达式引擎的apache commons配置XMLConfiguration对象来查询XML文件。我是xpath和apache commons的新手,我的语法有问题。

xml文件如下所示:

<attrs>
    <attr name="my_name" val="the_val"/>
    <attr name="my_name2" val="the_val2"/>
</attrs>

我想要做的基本上是公共循环遍历所有属性并读取每行的名称和值。我可以解决所有问题的唯一方法是使用name的值再次查询xml。这种感觉对我来说不对,有没有更好的方法呢?

List<String> names = config.getList("attrs/attr/@name");
for( String name : names )
{
    String val = config.getString("attrs/attr[@name='" +name +"']/@val" );
    System.out.println("name:" +name +"   VAL:" +val);
}

此外,转换顶部为String,我不确定正确的处理方法。

2 个答案:

答案 0 :(得分:4)

一种选择是选择attr元素并将其作为HierarchicalConfiguration个对象进行迭代:

List<HierarchicalConfiguration> nodes = config.configurationsAt("attrs/attr");
for(HierarchicalConfiguration c : nodes ) {
    ConfigurationNode node = c.getRootNode();
    System.out.println(
        "name:" + ((ConfigurationNode) 
                            node.getAttributes("name").get(0)).getValue() +
        " VAL:" + ((ConfigurationNode) 
                            node.getAttributes("val").get(0)).getValue());
}

这不是很漂亮,但确实有效。

答案 1 :(得分:0)

如何使用commons XML配置获取与此xml示例中的给定属性匹配的标记的值?

<attrs>
    <attr name="my_name"> First Name</attr>
    <attr name="my_name2"> First Name 2 </attr>
</attrs>

想要获取匹配的my_name属性值的值First Name