【问题标题】:Extract and Modify cdata section of xml using c#使用c#提取和修改xml的cdata部分
【发布时间】:2015-05-22 04:23:05
【问题描述】:

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

【问题讨论】:

    标签: c# xml cdata


    【解决方案1】:

    鉴于此有效 XML 示例:

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

    由于作为&lt;parent&gt; 的直接子节点的唯一文本节点是您要获取的 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 。有效。对我的理解帮助很大。 :)
    猜你喜欢
    • 2011-06-07
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多