【问题标题】:How can I keep CDATA while updating the content of an xml node?如何在更新 xml 节点的内容时保留 CDATA?
【发布时间】:2018-08-20 08:38:57
【问题描述】:

在 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 的财产吗?

谢谢

【问题讨论】:

    标签: ruby nokogiri cdata


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2011-01-17
      • 2014-10-07
      相关资源
      最近更新 更多