更新xml节点的内容时如何保留CDATA?

时间:2018-08-20 08:38:58

标签: ruby nokogiri cdata

在Ruby脚本中,我想更新CDATA内容,同时保持格式为CDATA。

doc = Nokogiri::XML(File.open('text.xml'))
doc.xpath('//Test').each do |test|
  test.content = 'new string'
end

这是我的test.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Test><![CDATA[<p>Some content</p>]]></Test>

问题在我的文档CDATA中转换为Text。有什么办法可以保留CDATA属性?

谢谢

1 个答案:

答案 0 :(得分:0)

您的Nokogiri::XML::Element#content=将用文本节点替换Test的内容(并销毁曾经存在的所有内容)。您需要访问CDATA,然后在那个上运行content=。例如:

doc.xpath('//Test').each do |test|
  cdata = test.children.find(&:cdata?)
  cdata.content = 'new string' if cdata
end

(如果您可以告诉XPath直接选择CDATA节点,那么会更直接,但是我不知道它可以做到这一点。)