我正在尝试从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[>
,但是当我选择节点时它似乎在错误的地方转移。
答案 0 :(得分:3)
当存在嵌套的CDATA
部分时,您需要做的是将数据重新组合在一起。目前,您只是选择ChildNodes[0]
并忽略所有其他孩子。你可能会发现ChildNodes[1]
包含一些纯文本,然后ChildNodes[2]
包含另一个CDATA
部分,依此类推。
您需要提取所有这些内容,从CData部分提取数据,并将它们连接在一起,以获得Value
元素的有效“文本”内容。