为什么//元素在XPath中选择了太多元素?

时间:2018-02-08 15:53:51

标签: xml xpath

我正在开发一个项目,我需要能够转换XML文档,并且需要能够识别Name的{​​{1}},但xpath表达式{{1} }返回Opportunity的{​​{1}}和//Name的{​​{1}}。

Demo

示例XML:

Name

我似乎无法找到只会返回商机名称的谓词。由于两者都是其级别的最后一个Owner元素,因此NameOpportunity仍然会返回这两个元素。

是否可以编写仅返回 <root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org"> <Opportunity> <Owner> <Name>Christian Bale</Name> </Owner> <Name>Opportunity Name</Name> </Opportunity> </root> 的{​​{1}}而不是Name //Name[last()]的名称的XPath表达式?或者可以在选择之后消除其中一个匹配的音符?

2 个答案:

答案 0 :(得分:2)

了解//选择后代(或自我),因此它会按设计跳过遗产。要指定遗产,请使用/,默认情况下沿子轴选择:

/root/Opportunity/Name
然后可以从

中单独选择

/root/Opportunity/Owner/Name

按要求。

答案 1 :(得分:1)

只需使用

//Opportunity/Name/text()