如何从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>
答案 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