我有一些需要从中提取值的xml。非常简化的版本如下:

...
<event id="380783">
  ...
  <competitor id="1929" name="x">
    <homeaway>home</homeaway>
  </competitor>
  ...
</event>
...

有很多比赛项目,每个项目都有一个“主队”和一个“客队”-我需要得到主队和客队的参赛者id,但我需要知道是哪一个。
我自己就可以得到这样的身份证:
doc.xpath("//event[@id=#{uid}]//competitor").attr('id').value

我还可以找出给定的节点是“home”还是“away”
2.1.1 :107 > first_match.xpath('//event[@id=#{uid}]//competitor//homeaway').children[0].text
 => "home"
2.1.1 :108 > first_match.xpath('//event[@id=#{uid}]//competitor//homeaway').children[1].text
 => "away"

但我想找出身份证的范围是在家还是在外类似于:
away = xpath('//event[@id=#{uid}]//competitor//homeaway).children.text == away
away.parent.attr('id')

我该怎么做?

最佳答案

这个如何(使用ancestor轴获得idcompetitor):

home_id = doc.at_xpath(
  "//event[@id=#{uid}]//competitor//homeaway[text()='home']" +
  "/ancestor::competitor/@id").value

away_id = doc.at_xpath(
  "//event[@id=#{uid}]//competitor//homeaway[text()='away']" +
  "/ancestor::competitor/@id").value

关于ruby - 使用Nokogiri根据子属性的值提取父属性的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24956542/

10-08 23:08