Xpath不适用于xmlns

Ksh*_*rma 6 xml xpath xsd xml-parsing

我有以下XPath表达式:

/configuration/properties
Run Code Online (Sandbox Code Playgroud)

这是我的XML:

<configuration
    xmlns="http://www.ksharma.in/myXSD">
    <properties>
        <property key="a" value="1" />
        <property key="b" value="2" />
    </properties>
</configuration>
Run Code Online (Sandbox Code Playgroud)

XPath不起作用.但是,如果我将名称空间更改xmlnsxmlns:conf它的工作原理:

<configuration
    xmlns:conf="http://www.ksharma.in/myXSD">
    <properties>
        <property key="a" value="1" />
        <property key="b" value="2" />
    </properties>
</configuration>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

kjh*_*hes 11

放置xmlns="http://www.ksharma.in/myXSD" XML 的根元素上会将根及其后代放在http://www.ksharma.in/myXSD命名空间中.这实际上意味着XML文档中的所有元素名称都以http://www.ksharma.in/myXSD.然而,在你的XPath规定的元素是不是http://www.ksharma.in/myXSD命名空间.因此,您的XPath不匹配任何东西.

配售xmlns:conf="http://www.ksharma.in/myXSD"而不是根元素仅仅定义为一个前缀http://www.ksharma.in/myXSD命名空间,但实际上并不使用它.根元素及其后代保留在无命名空间中,因此您的XPath也可以找到它,也可以在没有命名空间的情况下进行测试.因此,您的XPath 匹配的东西.

另请参见XPath如何处理XML命名空间?


小智 5

那是因为您在默认命名空间中xmlns="http://www.ksharma.in/myXSD"。你可以试试

/*[local-name()='configuration']/*[local-name()='properties']
Run Code Online (Sandbox Code Playgroud)

反而。