使用 c# 提取和修改 xml 的 cdata 部分
Extract and Modify cdata section of xml using c#
我有以下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 部分,您可以通过这种方式 select 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>
我有以下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 部分,您可以通过这种方式 select 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>