我正在编写一个java程序来搜索文本并返回其节点信息。
- 程序应搜索文档中任意位置的文本。
- 返回 5 个预定义节点和节点值。
示例 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))。
示例结果应该是:-
Project - purchaseOrder
gamespace - hambook
gamespace - DbBook
hecrotSubject - hexValue
hecrotItem - hireValue
编辑
我在 java 中使用以下语句:-
String expression = Xpath;
Strings vals = xPath.compile(expression).evaluate(xmlDocument);
System.out.println(vals);
最佳答案
我不知道为什么你只得到根标签。
但在你的 xpath 中,某些值(节点名称)的情况是错误的。修复 hecrotSubject 和 hecrotItem 应该可以工作。
但顺便说一句,我不明白为什么您要使用 local-name 来设置正确的 namespace ,如下所示也应该这样做:
/b:gamespace/b:hecrotsubject/b:hecrotitem[contains(., 'searchTerm')]/ancestor-or-self::*/b:name[@locale='en']"
更新母鹿以更新问题
主要问题是您需要迭代可能由 xpath evaluate
返回的 NodeList
。
关于java - xml的xpath获取节点信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36034524/