如何在不使用docptr的情况下将CDATA作为值添加到特定节点

时间:2014-01-10 05:37:00

标签: c xml libxml2 cdata

我想像下面那样创建和xml文件。 我将child节点的值视为字符串,并使用函数xmlNewText(BAD_CAST string)添加它,其中string是我想要放在子节点中的值

   <?xml version="1.0" encoding="UTF-8"?>
    <Root>
        <child>![CDATA[<data>hello</data>]]</child>
    </Root>

但这会转换为

   <?xml version="1.0" encoding="UTF-8"?>
    <Root>
        <child>![CDATA[&lt;data&gt;hello&lt;/data&gt;]]</child>
    </Root>

任何人都可以指导我这样做吗?我看到了一些问题,答案是基于使用docptr创建cdatasection。我需要在不使用docptr的情况下创建cdatasection。我和我一起吃了rootptr。有可能这样做吗?我使用c作为编程语言,我使用的库是libxml

1 个答案:

答案 0 :(得分:0)

您实际上无法通过将XML内容作为文本插入DOM来构建XML内容。此示例显示了一些原因 - 不仅DOM正确地转义文本节点的内容,而且您的语法错误。

而是使用节点工厂创建一个CDATASection节点,其中包含要包含在文档中的文本。

或者 - 因为没有充分的理由在这里使用CDATA部分 - 创建一个Text节点而不尝试手动包装其内容,并让DOM序列化器适当地转义它。您可能会逐个字符转义,这在XML文件中看起来不那么漂亮......但对于处理该XML的任何正确编写的应用程序来说,这意味着完全相同。

(不可否认,有些应用程序会关注普通文本和CDATA部分之间的区别。这些应用程序的技术术语“已损坏”。)