有没有一种方法可以遍历 Ruby 中的特定 XML 标记?
Is there a way of iterating through a specific XML tag in Ruby?
是否可以迭代 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>
到目前为止,这是我使用的代码:
xml_doc = agent.get("www.somewhere.com/file.xml")
document = REXML::Document.new(xml_doc.body);
# iterate over desc here
我想遍历每个 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
有什么建议吗?
我还建议使用 Nokogiri 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 示例:
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
是否可以迭代 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>
到目前为止,这是我使用的代码:
xml_doc = agent.get("www.somewhere.com/file.xml")
document = REXML::Document.new(xml_doc.body);
# iterate over desc here
我想遍历每个 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
有什么建议吗?
我还建议使用 Nokogiri 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 示例:
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