【问题标题】:How to find text in XML and display its sibling with Nokogiri?如何在 XML 中查找文本并使用 Nokogiri 显示其兄弟?
【发布时间】:2012-03-27 21:44:57
【问题描述】:

我从 REST API 中使用了以下 XML:

<dataitems>
  <dataitem colour="null">
     <value>
        <label>Intel</label>
        <count>43</count>
     </value>
     <value>
        <label>AMD</label>
        <count>39</count>
     </value>
     <value>
        <label>ARM</label>
        <count>28</count>
     </value>
  </dataitem>
</dataitems>

我想搜索&lt;label&gt;标签中的文字,并在表格中显示&lt;count&gt;的匹配值。

在控制器中我有:@post_count = Nokogiri::XML(Post.item_data.to_xml)

在视图中我不确定是否需要使用@post_count.xpath@post_count.search

有人可以为我指出正确的方法和语法吗?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails dom syntax xml-parsing nokogiri


    【解决方案1】:

    虽然我不确定您在寻找什么信息,但我有一些建议。

    1) 如果您在搜索之前知道元素中的值:

    doc = Nokogiri.XML(open(source_xml))
    
    # Assuming there is only one of each label
    node = doc.xpath('//label[text()="Intel"]').first
    count = node.next_element.text
    
    # or if there are many of each label
    nodes = doc.xpath('//label[text()="Intel"]')
    nodes.each {|node|
      count = node.next_element.text
      # do something with count here
    }
    

    2) 假设你事先不知道标签内的名字

    doc = Nokogiri.XML(open(source_xml))
    labels = {}
    doc.xpath('//label').each {|node|
      labels[node.text] = node.next_element.text
    }
    
    # labels => {"Intel"=>"43", "AMD"=>"39", "ARM"=>"28"}
    

    我个人更喜欢第二种解决方案,因为它为您提供了一个干净的散列,但我更喜欢尽快使用散列和数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2022-08-19
      相关资源
      最近更新 更多