Cam*_*ron 19 ruby xml newline nokogiri
我目前正在使用Nokogiri :: XML :: Builder类来构造XML文档,然后在其上调用.to_xml.结果字符串总是在节点之间包含一堆空格,换行符和回车符,我不能为我的生活弄清楚如何摆脱它们.这是一个例子:
b = Nokogiri::XML::Builder.new do |xml|
xml.root do
xml.text("Value")
end
end
b.to_xml
Run Code Online (Sandbox Code Playgroud)
这导致以下结果:
<?xml version="1.0"?>
<root>Value</root>
Run Code Online (Sandbox Code Playgroud)
我想要的是这个(注意缺少的换行符):
<?xml version="1.0"?><root>Value</root>
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?提前致谢!
Hol*_*ust 30
Builder#to_xml默认情况下输出格式化(即缩进)XML.您可以使用它Nokogiri::XML::Node::SaveOptions来获得几乎未格式化的结果.
b = Nokogiri::XML::Builder.new do |xml|
xml.root do
xml.foo do
xml.text("Value")
end
end
end
b.to_xml
#=> "<?xml version=\"1.0\"?>\n<root>\n <foo>Value</foo>\n</root>\n"
b.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML)
#=> "<?xml version=\"1.0\"?>\n<root><foo>Value</foo></root>\n"
Run Code Online (Sandbox Code Playgroud)
现在你可以删除XML标题(无论如何都是可选的)并删除最后一个换行符
b.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION).strip
#=> "<root><foo>Value</foo></root>"
Run Code Online (Sandbox Code Playgroud)
只删除XML中的任何换行可能是一个坏主意,因为换行实际上可能很重要(例如,在<pre>XHTML块中).如果你不是这种情况(而且你确实如此),你就可以做到.