Добавить необработанный XML в документ XML, созданный с помощью libxml-ruby

Работая с KML (которые, конечно, являются XML), у меня есть множество стилей, которые - для людей - легче всего читать и поддерживать как необработанный XML. Я хотел бы добавить их в документ XML, создаваемый с помощью libxml-ruby.

Вот упрощенный пример:

require 'xml'

raw_xml = <<~END
  <Style>
    <foo>bar</foo>
  </Style>
END

xml = XML::Document.new
xml.root = XML::Node.new(:Document)
xml.root << raw_xml
xml.to_s

Результат:

<?xml version="1.0" encoding="UTF-8"?>
<Document>&lt;Style&gt;
  &lt;foo&gt;bar&lt;/foo&gt;
&lt;/Style&gt;
</Document>

Этого следовало ожидать с << не разбирает сырой XML. Мой вопрос, однако, есть ли способ сделать это правильно и получить следующий результат?

<?xml version="1.0" encoding="UTF-8"?>
<Document>
  <Style>
    <foo>bar</foo>
  </Style>
</Document>

Спасибо за ваши подсказки!

1 ответ

Решение

xml.root это пример LibXML::XML::Node, его <<, метод для добавления узла. Не для анализа строки XML.

Для разбора строки вы можете использовать, например, XML::Parser.string:

xml = XML::Document.new
xml.root = XML::Node.new(:Document)
# Parse the string into XML::Document, then take its root node tree
another_doc = XML::Parser.string(raw_xml).parse
node = xml.import(another_doc.root)
xml.root << node
Другие вопросы по тегам