XPath,如何根据属性依赖

时间:2016-10-04 13:51:53

标签: xml xpath

我正在努力将我的XPath查询中的两个条件合并为属性依赖。

我想选择AdjsCI = 4005和AdjsRNCid = 280

的所有节点
<managedObject class="ADJS">
  <p name="AdjsCI">4005</p>
  <p name="AdjsRNCid">280</p>
</managedObject>

对于单一条件,它工作正常,但我找不到2。

有1个条件:

的SelectNodes( “// managedObject / P [@名称= 'AdjsCI'] [文本()= '4005']”);

这个没问题。

但有了2,我尝试了很多选项,但都没有。

SelectNodes(“// managedObject / p [@ name ='AdjsCI'和@ name ='AdjsRNCid] [text()='4005'和text()='280']”);

SelectNodes(“// managedObject / p [[@ name ='AdjsCI'] [text()='4005]和[@ name ='AdjsRNCid] [text()='280']]”); < / p>

SelectNodes(“// managedObject / p [@ name ='AdjsCI'] [text()='4005']和// managedObject / p [@ name ='AdjsRNCid'] [text()='280' ]“);

有解决方法吗?

非常感谢你。

JoãoPaulo

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您需要将and 置于谓词([]条件)中,确保相对于正在考虑的节点:

//managedObject[p[@name='AdjsCI']=4005 and p[@name='AdjsRNCid']=280]

请注意,在您的整个元素的内容是您要与之合作的情况下,您不需要text()

答案 1 :(得分:0)

您有几个选项纯粹基于问题中的xml。

1

SelectNodes("//managedObject/p[contains(@name,'Adjs') and (text()='4005' or text()='280')]");

2

SelectNodes("//managedObject/p[(@name,'AdjsCI' or @name='AdjsRNCid') and (text()='4005' or text()='280')]");
    3。

    如果要选择没有数据依赖性的节点,可以使xpath更通用。例如,

    SelectNodes("//managedObject/p[contains(@name,'Adjs')); 
    

    这将选择name属性中包含Ajds的任何节点。

    还有更多选项,例如正则表达式也可以使用。但这应该解决你目前面临的问题。