我正在尝试使用xml
访问xpath
文件。
我为xpath
提出的当前代码是:
//*[local-name()='namespace']/*[local-name()='querySubject']/*[local-name()='queryItem']
[contains(., 'searchTerm')]/ancestor-or-self::*/*[local-name()='name']
我的xml
如下:
<project xmlns="https://afdsl/skdflsk/d">
<name>AbcPos</name>
<property name="included" type="hidden">true</property>
<locales>
<locale>en</locale>
<locale>de</locale>
</locales>
<defaultLocale>en</defaultLocale>
<namespace>
<name locale="en">AbcPos</name>
<name locale="de">AbcPos</name>
<lastChanged>2014-03-05T18:47:30</lastChanged>
<lastChangedBy>userx</lastChangedBy>
<property name="included" type="hidden">true</property>
<namespace>
<name locale="en">Database Layer</name>
<name locale="zw">Database Layer</name>
<querySubject status="valid">
<name locale="en">qskxyz</name>
<name locale="zw">qskxyz</name>
<queryItem>
<name locale="en">qixyz</name>
<name locale="zw">qixyz</name>
<hello>searchTerm</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
<namespace>
<name locale="en">Names</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<namespace>
<name locale="en">Database Layer</name>
<name locale="zw">Database Layer</name>
<querySubject status="valid">
<name locale="en">qsxyz</name>
<queryItem>
<name locale="en">myName</name>
<hello>...Hi there..</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
</project>
我必须实现以下目标:
Xpath应仅返回标签
<name locale="en">Database Layer</name>
的英文名称,而不返回“zw”等其他语言名称。- 醇>
Xpath应仅返回选定的标记名称,而不是所有祖先。 目前它返回所有语言的所有祖先名称,即“en”或“zw”,如下所示
当前结果是:
<name>AbcPos</name>
-----------------------
<name locale="en">AbcPos</name>
-----------------------
<name locale="de">AbcPos</name>
-----------------------
<name locale="en">Database Layer</name>
-----------------------
<name locale="zw">Database Layer</name>
-----------------------
<name locale="en">qskxyz</name>
-----------------------
<name locale="zw">qskxyz</name>
-----------------------
<name locale="en">qixyz</name>
-----------------------
<name locale="zw">qixyz</name>
结果是我想要的:
<name>AbcPos</name>
-----------------------
<name locale="en">Database Layer</name>
-----------------------
<name locale="en">qskxyz</name>
-----------------------
<name locale="en">qixyz</name>
-----------------------
您可以测试此xpath
code。
答案 0 :(得分:2)
这应该有效:
//namespace[./descendant::hello[contains(text(), 'searchTerm')] and not(./ancestor::namespace)]/descendant::name[@locale='en']
这与您的逻辑略有不同。第一
//namespace[./descendant::hello[contains(text(), 'searchTerm')] and not(./ancestor::namespace)]
选择第一个最外层的namespace
元素,然后选择
/descendant::name[@locale='en']
获取name
属性设置为locale
'en'
代码
此外,我建议使用这个完美无缺的tool,因为你提供的链接不符合我的要求。