2015-09-10 88 views
0

我在这个XML的文件格式:选择基于属性的特定属性值

<league country="argentina" name="Argentina: Torneo Federal A - Winners Stage" cup="False" id="2909" sub_id="29094"> 
    <match alternate_id="4187269" alternate_id_2="4394549" date="14.08.2015" id="4304775" static_id="14081523515562337775" status="FT" time="18:00"> 
    <home goals="2" id="2351556" name="Club Atletico Mitre"></home> 
    <away goals="1" id="2337775" name="Chaco For Ever"></away> 
    <events> 
    <event assist="" assistid="" id="22958994" minute="32" player="Juan Pablo Villafane" playerid="" result="[1 - 0]" team="home" type="goal"></event> 
    <event assist="" assistid="" id="22958995" minute="48" player="Aldo Visconti" playerid="" result="[1 - 1]" team="away" type="goal"></event> 
    <event assist="" assistid="" id="22958996" minute="90" player="Emanuel Lazzarini" playerid="" result="[2 - 1]" team="home" type="goal"></event> 
    </events> 
    <ht score="[1-0]"></ht> 
    <ft score="[2-1]"></ft> 
    </match></league><league country="argentina" name="Argentina: Torneo Federal A - Losers Stage" cup="False" id="2909" sub_id="29095"><match alternate_id="4178253" alternate_id_2="4410516" date="14.08.2015" id="4295774" static_id="14081523557572337894" status="FT" time="18:00"> 
    <home goals="2" id="2355757" name="Velez de San Ramon"></home> 
    <away goals="1" id="2337894" name="Sportivo Patria"></away> 
    <events> 
    <event assist="" assistid="" id="23118664" minute="11" player="Diego Suarez" playerid="" result="[1 - 0]" team="home" type="goal"></event> 
    <event assist="" assistid="" id="23118665" minute="64" player="Luis Leguizamon" playerid="" result="[2 - 0]" team="home" type="goal"></event> 
    <event assist="" assistid="" id="23118666" minute="67" player="Rodrigo Ramirez (o.g.)" playerid="" result="[2 - 1]" team="away" type="goal"></event> 
    </events> 
    <ht score="[1-0]"></ht> 
    <ft score="[2-1]"></ft> 

这是我的控制器:

xml = Nokogiri::XML(f) 

    path = "//match[@static_id='user.matchid']" 
    @country = xml.xpath(path) 

我怎样才能得到团队的名称,依据条件是属性值"result" = [1-0][0-1]

+0

欢迎堆栈溢出。当您提供数据或代码时,将其降至必要的最低水平,以显示您遇到的问题。换句话说,你的XML非常冗长,需要减少。这也是无效的。当Nokogiri _can_修复它时,这样做会导致XML通常无法准确反映原始内容。未能提供准确的反映真实信息的输入数据会减慢或停止我们帮助您的能力,因此请帮助我们为您提供帮助并提供准确,最简单的数据。 –

回答

0

我会做这样的事情:

require 'nokogiri' 

doc = Nokogiri::XML(<<EOT) 
    <xml> 
    <league> 
     <match> 
     <events> 
      <event player="Juan Pablo Villafane" result="[1 - 0]" team="home"></event> 
      <event player="Aldo Visconti" result="[1 - 1]" team="away"></event> 
     </events> 
     <events> 
      <event player="Diego Suarez" result="[1 - 0]" team="home"></event> 
      <event player="Luis Leguizamon" result="[2 - 0]" team="home"></event> 
     </events> 
     </match> 
    </league> 
    </xml> 
EOT 

doc.search('//event[contains(@result, "[1 - 0]") or contains(@result, "[0 - 1]")]/@team').map(&:text) 
# => ["home", "home"] 
0

没有明确说明什么是检查究竟是。所以,这里是上下文的示例情况,假设你想获得主队比赛的名称,其中最后一次得分是"[2-1]"

//match[ft/@score = '[2-1]']/home/@name