我有一个生成XML数据并将其保存到文件的脚本:
result_XML = Nokogiri::XML::Builder.new do |xml|
xml.root {
...
xml.job {
xml.job_id job_id
xml.job_description job_description
}
}
end
File.open("result.xml", 'w') { |f| f.write(result_XML.to_xml) }
在job_description
中,我的文字可以包含换行符(“\ n”)。我希望在打开生成的文件时显示它们,但是当我打开它时,所有描述都显示为一个字符串而没有任何中断。
我尝试了
,

,<[!CDATA[ ... ]]>
,但没有任何效果。
示例:
job_id = 109504
job_description = "Requirements:\n 1. Be polite.\n 2. 20+ years old."
result_XML = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.job {
xml.job_id_ job_id
xml.job_description_ job_description
}
}
end
File.open("result.xml", 'w') { |f| f.write(result_XML.to_xml) }
现在如果我在浏览器中打开文件result.xml,我会得到:
<root>
<job>
<job_id>109504</job_id>
<job_description>Requirements: 1. Be polite. 2. 20+ years old.</job_description>
</job>
</root>
此错误表明此XML文件没有任何样式信息。
我想要的是:
<root>
<job>
<job_id>109504</job_id>
<job_description>
Requirements:
1. Be polite.
2. 20+ years old.
</job_description>
</job>
</root>
<br/>
有效,但看起来像这样:
<root>
<job>
<job_id>109504</job_id>
<job_description>
Requirements:
<br/>
1. Be polite.
<br/>
2. 20+ years old.
<br/>
</job_description>
</job>
</root>
如果在职位描述中有很多换行符,那就变得难以理解了。
所以我不希望显示<br/>
标记。
非常感谢!
答案 0 :(得分:0)
如果您希望以特定方式呈现XML树(例如使用换行符),而不依赖于浏览器的默认XML呈现模型(可能因浏览器而异),您最好这样做通过将结果显式转换为HTML来实现它。
例如:
require 'nokogiri'
result_XML = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.job {
xml.job_id 1
xml.job_description %{
my job
another line
one more line
}
}
}
end
result_HTML = Nokogiri::HTML::Builder.new do |doc|
doc.html {
doc.head {
doc.script(:src => 'https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js')
}
doc.body(:onload => 'some_func();') {
doc.pre(:class => "prettyprint lang-xml") {
doc.text result_XML.to_xml
}
}
}
end
File.open("result.html", 'w') { |f| f.write(result_HTML.to_html) }
或者,如果您仍希望将.xml作为主输出,则可以向其添加XSTL样式表:
<?xml-stylesheet type="text/xsl" href="xml2html.xsl" ?>
这将使浏览器即时将其转换为HTML文档。
(注意!&#34; xml2html.xsl&#34;只是一个虚拟名称,您需要在HTML&#34;样式表中找到(或写入)真正的通用XML树并引用它相反,如果你想要这个工作)。