Добавить необработанный 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><Style>
<foo>bar</foo>
</Style>
</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