带xmlns的Xpath

时间:2016-03-01 05:33:52

标签: xml xpath

虽然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。

1 个答案:

答案 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