【发布时间】:2011-09-28 13:58:48
【问题描述】:
我从未遇到过将 XML 从一种形式转换为另一种形式的任务。我听说 XSLT 就是为了这个,但我不想去那里。因此,仅使用 ruby 和 nokogiri,我如何:
删除所有 item elements 但 time初始 XML 以及 rename element time 到 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>" 的东西?
【问题讨论】:
-
Nokogiri 网站有一个tutorial 在做这种事情。文档也充满了示例,例如 Nokogiri::XML::Node。
-
我已经阅读过 XML::Node 文档,但无法理解如何做我想做的事。您链接到的教程也缺少急需的说明。
-
一步一步来。你想重命名一个节点。没有重命名方法,但有删除和添加节点方法,以及获取和设置节点内容的方法。所以你可以做一个复制+删除+添加。
-
你可以用 Nokogiri 重命名节点,看看
Node#name=。无需复制/删除/添加(容易出错)。