Ruby on rails 在Ruby中有没有迭代特定XML标记的方法?

Ruby on rails 在Ruby中有没有迭代特定XML标记的方法?,ruby-on-rails,ruby,xml,nokogiri,rexml,Ruby On Rails,Ruby,Xml,Nokogiri,Rexml,可以在Ruby中迭代特定的XML标记吗?在本例中,我希望在以下XML代码中迭代desc标记: <desc> <id>2408</id> <who name="Joe Silva">joe@silva.com</who> <when>Today</when> <thetext>Hello World</thetext> </desc> &l

可以在Ruby中迭代特定的XML标记吗?在本例中,我希望在以下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>
我希望迭代每个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

有什么建议吗?

我还建议使用gem。这样的事情应该行得通:

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

我还建议使用gem。这样的事情应该行得通:

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

包括who节点的name属性的Nokogiri示例:


包括who节点的name属性的Nokogiri示例:


这怎么不是的重复?使用XPath迭代节点列表。这怎么不是的重复?使用XPath迭代节点列表。而不是doc.css'desc id'。首先使用doc.at'desc id'。而不是xpath“//desc/id”。第一次使用xpath…太棒了,我不知道那个。我已经更新了我的答案。谢谢你的帮助+1不使用doc.css'desc id'。首先使用doc.at'desc id'。而不是xpath“//desc/id”。第一次使用xpath…太棒了,我不知道那个。我已经更新了我的答案。谢谢你的帮助+1正是我想要的。谢谢+1正是我想要的。谢谢+1.
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