在c#中处理大型CDATA节

本文关键字:CDATA 大型 处理 | 更新日期: 2023-09-27 18:16:09

我试图从xml文档检索cdata部分,xml的格式是这样的:

<Configuration>
    <ConfigItem>
        <Key>Hello World</Key>
        <Value><![CDATA[For the value we have a large chunk of XAML stored in a CDATA section]]></Value>
    </ConfigItem>
</Configuration>

我想做的是从CDATA部分检索XAML,到目前为止我的代码如下:

XmlDocument document = new XmlDocument();
document.Load("Configuration.xml");
XmlCDataSection cDataNode = (XmlCDataSection) document.SelectSingleNode("//*[local-name()='Value']").ChildNodes[0];
String cdata = cDataNode.Data;

然而,cdata字符串已被截断,并且是不完整的,我猜是因为实际的cdata太大而无法容纳字符串对象。

正确的做法是什么?

编辑:

所以我最初的假设字符串太长是不正确的。现在的问题是我的CDATA包含一个嵌套的CDATA。在线阅读似乎逃避嵌套cdata的正确方法是使用]]]]><![CDATA[>,该xml正在使用,但似乎当我选择节点时,它正在错误的地方进行转义。

在c#中处理大型CDATA节

当有嵌套的CDATA部分时,您需要做的是将数据重新拼接在一起。目前,你只选择了ChildNodes[0],忽略了其他所有子节点。您可能会发现ChildNodes[1]包含一些纯文本,然后ChildNodes[2]包含另一个CDATA部分,以此类推。

您需要提取所有这些,从CData部分提取数据,并将它们全部连接在一起,以获得Value元素的有效"文本"内容。