虽然Xpath和xmlns上有很多问题,但我无法达到预期的效果。
我的xml是: -
<project xmlns = "https://afdsl/skdflsk/d"><name>AMCR_Positions</name><property name="included" type="hidden">true</property><locales><locale>en</locale><locale>de</locale></locales>
<defaultLocale>en</defaultLocale>
<namespace><name locale="en">AMCR_Positions</name>
<name locale="de">AMCR_Positions</name>
<lastChanged>2015-04-06T17:37:40</lastChanged>
<lastChangedBy>I575079</lastChangedBy>
<property name="included" type="hidden">true</property>
<namespace>
<name locale="en">Database Layer</name>
<querySubject status="valid">
<name locale="en">qskxyz</name>
<queryItem>
<name locale="en">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>
<querySubject status="valid">
<name locale="en">qsxyz</name>
<queryItem>
<name locale="en">myName</name>
<hello>...Hi there..</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
</project>
我的xpath: - //*[local-name()='namespace']/*[local-name()='querySubject']/*[local-name()='queryItem'][contains(., 'searchTerm')]/*ancestor-or-self::*/name
或简化版: - //namespace//querySubject/queryItem[contains(.,'searchTerm')]/ancestor-or-self::*/name
这适用于没有命名空间的xml,但是当有命名空间时它会失败。我已经搜索了所有使用vbscript程序的方式所以我不想绑定命名空间而不喜欢纯Xpath。
答案 0 :(得分:0)
“我的XPath”部分当前显示无效的XPath表达式,即/*ancestor-or-self::*
,并且您忘记在XPath结束时使用local-name()
匹配name
元素。下面是XPath的更正版本(包装成行以使其更具可读性):
//*[local-name()='namespace']
/*[local-name()='querySubject']
/*[local-name()='queryItem'][contains(., 'searchTerm')]
/ancestor-or-self::*
/*[local-name()='name']
快速演示:http://www.xpathtester.com/xpath/5aa4726e3bcd606dd657ca69aa4ac4ec