Использование ruby ​​/ nokogiri для преобразования xml в другой xml - PullRequest
2 голосов
/ 28 сентября 2011

Я никогда не сталкивался с задачей преобразования XML из одной формы в другую.Я слышал, что XSLT только для этого, но я не хочу туда идти.Итак, используя только ruby ​​и nokogiri, как я могу:
удалить все item элементы , но время из исходного 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>
...

Я выяснил, как поместить данные из XML в массив, используя .xpath от nokogiri, но есть ли способ сделать желаемое преобразование в другой XML без необходимости писать что-то вроде puts "<HammerTime>#{array['time']}</HammerTime>"?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Вот, пожалуйста:

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
0 голосов
/ 29 сентября 2011

Что вы имеете в виду под

в другой XML без необходимости писать что-то вроде puts "<HammerTime>#{array['time']}</HammerTime>"?

Если вы хотите преобразовать элемент XML в другой, независимый от языка, вы можете использовать преобразования XSLT (или таблицу стилей). Получив XSLT-файл, вы можете применить его с помощью Nokogiri::XSLT::Stylesheet#apply_to.

от Nokogiri.
...