2012-04-25 135 views
0

使用Ruby 1.9.3和引入nokogiri(最新):的XPath谓词组合多个元素

考虑(不,我没有想出这个):

<root> 
<subelement> 
    <key> 
      <var name="id">50</var> 
      <var name="secondaryid">0</var> 
    </key> 
</subelement> 
<subelement> 
    <key> 
      <var name="id">50</var> 
      <var name="secondaryid">1</var> 
    </key> 
</subelement> 
</root> 

返回父元素(<键>),它具有名称属性等于“id”且值等于50的var元素AND具有名称属性等于“secondaryid”且值等于0的var元素。不返回id = 50的节点和secondaryid = 1。

显然,这将是建关沿着线的东西:

@ doc.xpath( “// VAR [@名称= 'ID' 和文字()= 50]”)

但我无法弄清楚如何添加另一个匹配name =“secondaryid”元素的谓词。

回答

0

没有用Ruby测试过,但是这应该可以做到。

//key[var[@name='id'] = '50'][var[@name='secondaryid'] = '0'] 
+0

我一直在寻找secondaryid = 0,但除此之外的小错字,完美。在此期间,我想出了另一种可行的解决方案,但更加不雅观,并且可能存在一些问题'/ var [@ name ='id'and text()= 50] /../ var [@ name =' secondaryid'和text()= 0]/..' – wadesworld 2012-04-25 10:05:56

+0

啊是的,编辑搜索0而不是1。 – kmkaplan 2012-04-25 11:42:45

0

另一种方法:

subelement/key 
    [var[@name="id" and . = "50"]] 
    [var[@name="secondaryid" and . = "0"]]