在Java中查找节点值DOM

时间:2015-01-03 22:15:29

标签: java xml parsing dom

如何从XML中获取Java中特定节点的值。

我的结构与你所看到的相似,我想得到userFileds的值(2,NA为第一个,1为最后一个(它是真实xml数据的一部分。元素数量更多) :

<element class="AufOrgKombination" hash="AOK_1414931143186_52">
<field name="layer">4</field><field name="name">Function </field>
<field name="description">des</field>
<userField hash="USERFIELD_1415779871581_0">2.0</userField>
<userField hash="USERFIELD_1415386348389_3">N.A.</userField>
</element>
<element class="AufOrgKombination" hash="AOK_1414931143186_23">
<field name="layer">4</field><field name="name">Function 2 </field>
<field name="description">des</field>
<userField hash="USERFIELD_1415779871581_0">1</userField>
</element>

2 个答案:

答案 0 :(得分:0)

您可以使用查询语言XPath。它的设计正是为了这个目的。 Java 7附带了一堆用于处理XPath的类。请参阅文档和示例here

请注意,您的xml格式不正确,因为它没有一个根元素。 对于xml文档的修改和格式良好的版本

<root>
<element class="AufOrgKombination" hash="AOK_1414931143186_52">
<field name="layer">4</field><field name="name">Function </field>
<field name="description">des</field>
<userField hash="USERFIELD_1415779871581_0">2.0</userField>
<userField hash="USERFIELD_1415386348389_3">N.A.</userField>
</element>
<element class="AufOrgKombination" hash="AOK_1414931143186_23">
<field name="layer">4</field><field name="name">Function 2 </field>
<field name="description">des</field>
<userField hash="USERFIELD_1415779871581_0">1</userField>
</element>
</root>

您的XPath查询看起来像

/root/element/userField/text()

查询结果(Testet与www.freeformatter.com/xpath-tester.html)如下所示:

Text='2.0'
Text='N.A.'
Text='1'

您可以使用上面提到的Java类来进行这种查询。

答案 1 :(得分:0)

您应该考虑不使用XPath API,而是a library that handles it for you披露:我与该项目有关联)。您可能希望以某种方式将XML结构反映到对象结构中。要克服一些困难(命名空间,默认命名空间,类型转换,映射到Java对象,......)。 使用建议的库的一种可能的解决方案:

public class Demo {

public interface Projection {
    interface Element {
        @XBRead("./userField")
        List<String> getUserFieldValues();
    }

    @XBRead("//element")
    List<Projection.Element> getElements();
}

public static void main(final String[] args) throws IOException {
    Projection projection = new XBProjector().io().url("resource://data.xml").read(Projection.class);
    for (Projection.Element element : projection.getElements()) {
        for (String userField : element.getUserFieldValues()) {
            System.out.println(userField);
            }
        }
    }
}

此程序打印出来:

2.0
N.A.
1