使用C#提取和修改XML的CDATA部分

4
我有以下的xml文件
<parent>
    <child>abra</child>
    <child>kadabra</child>
    <child>alakazam</child>
    <![CDATA[ some data here ]]>
</parent>

我希望提取cdata部分,我所做的是将数据转换为字符串,并使用以下代码提取它。

string toText = xmlDoc.OuterXml.Substring(xmlDoc.OuterXml.IndexOf("<![CDATA[") + "<![CDATA[".Length);
toText = toText.Remove(toText.IndexOf("]]>"));

其中xmlDoc是包含上述XML的XMLDocument。

有没有更好的方法来做这个?

我已经谷歌了很多,但我只得到了提取cdata部分的方法,仅当它是其父元素的唯一子元素时。

最后,我想修改cdata部分并修改当前的xml如下:

<parent>
    <child>abra</child>
    <child>kadabra</child>
    <child>alakazam</child>
    <![CDATA[ modified data here ]]>
</parent>
1个回答

7

给定这个合法的 XML 示例:

<parent>
    <child>1</child>
    <child>2</child>
    <child>3</child>
    <![CDATA[ some data here ]]>
</parent>

由于是直接作为<parent>标签的唯一文本节点的cdata部分,您可以按以下方式选择cdata段并修改它的内容:

var cdata = (XmlCDataSection)xmlDoc.SelectSingleNode("/parent/text()");
cdata.InnerText = " modified data here ";
Console.WriteLine(xmlDoc.OuterXml);

另一种可能的方法是使用XDocument替换旧的库XmlDocument

var doc = XDocument.Load("path_to_your_xml");
var xcdata = doc.DescendantNodes().OfType<XCData>().FirstOrDefault();
xcdata.Value = " modified data here ";
Console.WriteLine(doc.ToString());

输出结果如下(为了易读性进行了格式化):
<parent>
    <child>1</child>
    <child>2</child>
    <child>3</child>
    <![CDATA[ modified data here ]]>
</parent>

非常感谢har07。它起作用了。它帮助我很多,让我更好地理解了。 :) - Bopsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接