我有一个看起来像这样的文件:
<text>foo
<bar>
baz
</text>
即包含带换行符,实体等的文本节点。
由于我们使用的一个数据库和搜索引擎(不是我的选择),我必须将&xA;
附加到该文本节点中的每一行。这是我试过的。
doc = Nokogiri::XML("<text>foo\n<bar>\nbaz</text>")
text_node = doc.xpath("/text")[0]
old_content = text_node.content.to_s
new_content = String.new
old.content.each do |line|
new_content << line.sub(/$/, "&xA;")
end
text_node.content = new_content
text_node.to_xml
不幸的是,这逃脱了实体本身,我得到了:
"<text>foo&xA;\n<bar>&xA;\nbaz</text>"
我正在寻找一种方法来保留现有实体,但在文本内容中添加新的文字实体。另外值得一提的是这个系统运行的是较旧的库(ruby 1.8.7,nokogiri 1.5.0)。
编辑:这与使用XML构建器的问题不重复。我尝试使用构建器并且我的问题成倍增加:它不会插入&xA;
(或
)而是插入换行符。这是一个问题,因为我存储的系统会从数据中删除换行符。它也逃脱了我现有的实体,所以我最终得到&gt;