使用ruby / nokogiri将xml转换为另一个xml

时间:2011-09-28 13:58:49

标签: ruby xml nokogiri

我从未遇到过将XML从一种形式转换为另一种形式的任务。我听说XSLT就是为了这个,但我不想去那里。所以,只使用ruby和nokogiri,我怎么能:
来自初始XML的删除所有 元素,但时间以及重命名元素 时间 HammerTime
初始XML:

...
<item>
  <time>05.04.2011 9:53:23</time>
  <iddqd>42</iddqd>
  <idkfa>woot</idkfa>
</item>
<item>
...

期望的结果:

...
<item>
  <HammerTime>05.04.2011 9:53:23</HammerTime>
</item>
<item>
...

我想出了如何使用nokogiri的.xpath将数据从XML放到数组中,但有没有办法将所需的转换转换成另一个XML,而无需手动编写puts "<HammerTime>#{array['time']}</HammerTime>"之类的内容?

2 个答案:

答案 0 :(得分:2)

你走了:

require 'rubygems'
require 'nokogiri'

doc = Nokogiri::HTML <<-EOHTML
<html>
  <body>
    <item>
      <time>05.04.2011 9:53:23</time>
      <iddqd>42</iddqd>
      <idkfa>woot</idkfa>
    </item>
  </body>
</html>
EOHTML

hammer = doc.at_css "time"
hammer.name = 'hammertime'
doc.css("iddqd").remove
doc.css("idkfa").remove

outfile = File.new("output.html", "w")
outfile.puts doc.to_html
outfile.close

答案 1 :(得分:0)

你的意思是什么

  

到另一个XML而无需手动编写类似puts "<HammerTime>#{array['time']}</HammerTime>"的内容?

如果要以与语言无关的方式将XML元素转换为另一个元素,可以使用XSLT转换(或样式表)。获得XSLT文件后,可以将其应用于Nokogiri的Nokogiri::XSLT::Stylesheet#apply_to