XPath 和 XML:多个命名空间

emr*_*ins 6 xpath xml-namespaces

所以我有一个文件,看起来像

<a xmlns="uri1" xmlns:pre2="uri2">
 <b xmlns:pre3="uri3">
   <pre3:c>
     <stuff></stuff>
     <goes></goes>
     <here></here>
   </pre3:c>
   <pre3:d xmlns="uri4">
     <under></under>
     <the></the>
     <tree></tree>
   </pre3:d>
  </b>
</a>
Run Code Online (Sandbox Code Playgroud)

我想要一个可以得到我的 xpath 表达式<under>

它有一个 uri4 的 namespaceURI。

现在我的表情是这样的:

//ns:a/ns:b/pre3:d/pre4:under
Run Code Online (Sandbox Code Playgroud)

我让命名空间管理器为默认命名空间(在本例中为 uri1)添加了“ns”,并分别为 uri2、uri3 和 uri4 定义了 pre2、pre3 和 pre4。

我收到错误“表达式必须评估为节点集”。

我知道该节点存在。我知道直到pre4:under在我的 xpath中的所有内容都可以正常工作,因为我在文档的其余部分使用它没有任何问题。这pre4:under是导致错误的附加因素,我不确定为什么。

有任何想法吗?

谢谢。

解析度:

感谢大家坚持认为它是正确的——它是正确的。但是......在我的代码中,我将“pre4”作为“64”(一个变量),它不喜欢一个整数作为前缀。将其更改为“d”+ myintvariable 有效。

Ric*_*ber 3

我的猜测是,您用来导航 XML 的实现可能存在错误。使用SketchPath,以下 XPath 成功导航到该节点:

/def:a/def:b/pre3:d/def2:under
Run Code Online (Sandbox Code Playgroud)

您可以尝试为 XPath 中的名称空间指定不同的前缀吗?否则,如果性能并不是真正的问题,并且它是一个独特的节点,那么您可以尝试//under