我编写了一大块XML解析,如果我使用绝对路径,它就能成功运行。
我现在需要将XMLNode作为参数并针对此运行xpath。
有谁知道怎么做?
我尝试使用相对XPath查询但没有成功!!
应该这么难吗?
答案 0 :(得分:2)
查看XPath表达式的示例会有所帮助,这些表达式无法正常工作。以下是一些可能的原因(我经常犯的错误)。
假设XML文档如:
<A>
<B>
<C d='e'/>
</B>
<C/>
<D xmlns="http://foo"/>
</A>
忘记删除代表文档的顶级斜杠('/'):
document.XPathSelectElements("/A")
//选择一个A节点
document.XPathSelectElements("//B")
//选择一个B节点
document.XPathSelectElements("//C")
//选择两个C节点
但是
aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B)
aNode.XPathSelectElements("B") // selects a B node
bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node
bNode.select(".//C") // selects one C node - all descendants of B
忘记名称空间。
aNode.XPathSelectElements("D")
//不选择任何内容(D与A不同的名称空间)
aNode.XPathSelectElements("[local-name()='D' and namespace-uri()='http://foo']")
//一个D节点
(当根节点带有无前缀的命名空间时,这通常是一个问题 - 很容易错过)