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不起作用.但是,如果我将名称空间更改xmlns
为xmlns: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 匹配的东西.
小智 5
那是因为您在默认命名空间中xmlns="http://www.ksharma.in/myXSD"
。你可以试试
/*[local-name()='configuration']/*[local-name()='properties']
Run Code Online (Sandbox Code Playgroud)
反而。