[英]xpath for xml to get node information
我正在编写一个Java程序来搜索文本并返回其节点信息。
示例xml文件: -
<project xmlns="https://example.hoom/go/bing">
<name>purchaseOrder </name>
<property name="included" type="hidden">true</property>
<locales>
<locale>en</locale>
<locale>hi</locale>
</locales>
<defaultLocale>en</defaultLocale>
<gamespace>
<name locale="en">hambook</name>
<name locale="de">hambook</name>
<lastChanged>2014-03-05T18:47:30</lastChanged>
<lastChangedBy>userx</lastChangedBy>
<property name="included" type="hidden">true</property>
<gamespace>
<name locale="en">DbBook</name>
<name locale="zw">DbBook</name>
<hecrotSubject status="valid">
<name locale="en">hexValue</name>
<name locale="zw">hexValue</name>
<hecrotItem>
<name locale="en">hireValue</name>
<name locale="zw">hireValue</name>
<hello>searchTerm</hello>
</hecrotItem>
</hecrotSubject>
</gamespace>
</gamespace>
<gamespace>
<name locale="en">Names</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<gamespace>
<name locale="en">Database Layer</name>
<name locale="zw">Database Layer</name>
<hecrotSubject status="valid">
<name locale="en">qsxyz</name>
<hecrotItem>
<name locale="en">myName</name>
<hello>...Hi there..</hello>
</hecrotItem>
</hecrotSubject>
</gamespace>
</gamespace>
</project>
我目前的xpath是: -
"//*[local-name()='gamespace']/*[local-name()='hecrotSubject']/*[local-name()='hecrotItem'][contains(., '"& searchTerm &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']"
哪个只使用xpath.compile().evaluate()
提供根标记。 虽然我需要的结果是
如果五个预定义节点包含搜索文本(此示例xml中的searchTerm),则其name值。
样本结果应为:-
项目 - purchaseOrder
游戏空间-hambook
游戏空间-DbBook
hecrotSubject-hexValue
hecrotItem-hireValue
编辑
我在java中使用以下语句: -
String expression = Xpath;
Strings vals = xPath.compile(expression).evaluate(xmlDocument);
System.out.println(vals);
我不知道为什么你只得到根标签 。
但是在你的xpaht中,某些值(节点名称)的情况是错误的。 修复hecrotSubject和hecrotItem它应该工作。
但顺便说一句,我不明白为什么你使用local-name设置正确的名称空间,如下所示:
/b:gamespace/b:hecrotsubject/b:hecrotitem[contains(., 'searchTerm')]/ancestor-or-self::*/b:name[@locale='en']"
将doe更新为更新的问题
主要的问题是,你需要遍历NodeList
可能与XPath返回evaluate
。
看看例如: 如何使用Java中的XPath读取XML
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.