我正在努力将我的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
答案 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')]");
如果要选择没有数据依赖性的节点,可以使xpath更通用。例如,
SelectNodes("//managedObject/p[contains(@name,'Adjs'));
这将选择name属性中包含Ajds的任何节点。
还有更多选项,例如正则表达式也可以使用。但这应该解决你目前面临的问题。