将原始 XML 添加到使用 libxml-ruby 构建的 XML 文档中
Add raw XML into XML document built with libxml-ruby
使用 KML(当然是 XML),我有很多样式,对于人类来说,它们最容易阅读和维护原始 XML。我想将它们添加到正在使用 libxml-ruby.
构建的 XML 文档中
这是一个简化的例子:
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>
感谢您的提示!
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
使用 KML(当然是 XML),我有很多样式,对于人类来说,它们最容易阅读和维护原始 XML。我想将它们添加到正在使用 libxml-ruby.
构建的 XML 文档中这是一个简化的例子:
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>
感谢您的提示!
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