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



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

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

这是我的测试.xml文件

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

问题是,在我的文档中,CDATA转换为Text.有什么方法可以保留CDATA财产吗?

谢谢

您的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 节点会更直接,但我不知道它是否可以做到这一点。

最新更新