我有一个生成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) }
现在如果我在浏览器中打开file 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/>
标签。
非常感谢!
如果您希望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文档。
(注意!"xml2html。