使用Nokogiri将未转义的实体添加到文档中

时间:2017-01-25 19:06:59

标签: ruby xml nokogiri

我有一个看起来像这样的文件:

<text>foo
    &lt;bar&gt;
    baz
</text>

即包含带换行符,实体等的文本节点。

由于我们使用的一个数据库和搜索引擎(不是我的选择),我必须将&xA;附加到该文本节点中的每一行。这是我试过的。

doc = Nokogiri::XML("<text>foo\n&lt;bar&gt;\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&amp;xA;\n&lt;bar&gt;&amp;xA;\nbaz</text>"

我正在寻找一种方法来保留现有实体,但在文本内容中添加新的文字实体。另外值得一提的是这个系统运行的是较旧的库(ruby 1.8.7,nokogiri 1.5.0)。

编辑:这与使用XML构建器的问题不重复。我尝试使用构建器并且我的问题成倍增加:它不会插入&xA;(或&#10;)而是插入换行符。这是一个问题,因为我存储的系统会从数据中删除换行符。它也逃脱了我现有的实体,所以我最终得到&amp;gt;

之类的东西

0 个答案:

没有答案