在C#中处理大型CDATA部分

时间:2014-08-01 11:09:25

标签: c# xml xaml xpath cdata

我正在尝试从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的正确方法是使用这个xml正在使用的]]]]><![CDATA[>,但是当我选择节点时它似乎在错误的地方转移。

1 个答案:

答案 0 :(得分:3)

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

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