c# - 使用 C# 提取和修改 xml 的 cdata 部分

标签 c# xml cdata

我有以下 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>

最佳答案

鉴于此有效 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>

关于c# - 使用 C# 提取和修改 xml 的 cdata 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29138074/

相关文章:

c# - 在 NTP 和 C# DateTime 之间转换

c# - 我什么时候应该使用 List 与 LinkedList

java - 对同一元素使用多个 @XStreamAlias 注释

xml - XML 中的 &lt;![CDATA[]]> 是什么意思?

string - Inno Setup 从 CDATA 创建 TStringList

c# - NopCommerce 4.20 依赖注入(inject)插件开发错误

c# - RichTextBox 选择同一单词的多次出现

java - 从嵌套 HashMap 中检索值

android - 想要添加 ScrollView

android - 来自 ksoap2 android 的 CData