简体   繁体   English

有没有一种方法可以遍历Ruby中的特定XML标签?

[英]Is there a way of iterating through a specific XML tag in Ruby?

Is it possible to iterate over a specific XML tag in Ruby? 是否可以在Ruby中迭代特定的XML标签? In my case I want iterate over the desc tag in the following XML code: 就我而言,我想遍历以下XML代码中的desc标记:

<desc>
     <id>2408</id>
     <who name="Joe Silva">joe@silva.com</who>
     <when>Today</when>
     <thetext>Hello World</thetext>
</desc>
<desc>
     <id>2409</id>
     <who name="Joe Silva2">joe2@silva.com</who>
     <when>Future</when>
     <thetext>Hello World Again</thetext>
</desc>

So far, here is the code I use: 到目前为止,这是我使用的代码:

xml_doc = agent.get("www.somewhere.com/file.xml")
document = REXML::Document.new(xml_doc.body);

# iterate over desc here

I want to iterate over each desc tags so that I get the following output: 我想遍历每个desc标记,以便获得以下输出:

commentid : 2408
name : Joe Silva
who : joe@silva.com
bug_when : Today
thetext : Hello World 

commentid : 2409
name : Joe Silva2
who : joe2@silva.com
bug_when : Future
thetext : Hello World Again

Any suggestions? 有什么建议么?

I'd also recommend using the Nokogiri gem. 我还建议您使用Nokogiri宝石。 Something like this ought to work: 这样的事情应该起作用:

require 'open-uri'
require 'nokogiri'

# fetch and parse the document
doc = Nokogiri::HTML(open('www.somewhere.com/file.xml'))

# search with css selectors
puts doc.at('desc id').text

# search by xpath
puts doc.at_xpath('//desc/id').text

# to iterate over a specific tag
doc.css('desc').each do |tag|
  puts tag.css('id').text
  # ...
end

Nokogiri example that includes the name attribute for the who node: Nokogiri示例,其中包含who节点的name属性:

require 'nokogiri'

doc = Nokogiri.XML '
<root>
  <desc>
     <id>2408</id>
     <who name="Joe Silva">joe@silva.com</who>
     <when>Today</when>
     <thetext>Hello World</thetext>
  </desc>
  <desc>
    <id>2409</id>
     <who name="Joe Silva2">joe2@silva.com</who>
     <when>Future</when>
     <thetext>Hello World Again</thetext>
  </desc>
</root>
'

doc.css("desc").each do |desc|
  puts "commentid : #{desc.css("id").text}"
  puts "name : #{desc.css("who").attribute("name")}"  
  puts "who : #{desc.css("who").text}"
  puts "bug_when : #{desc.css("when").text}"
  puts "the text : #{desc.css("thetext").text}"  
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM