在 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
如何从 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