在 Java 中查找节点值 DOM

finding node values DOM with in Java

如何从 XML.

中获取 Java 中特定节点的值

我的结构类似于您在下面看到的结构,我想获取 userFileds(2,N.A 的值。第一个为 1,最后一个为 1(它是真实 xml data.元素个数比较多):

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

您可以使用查询语言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 with www.freeformatter.com/xpath-tester.html)如下所示:

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

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

您应该考虑不使用 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