更新XML中的CDATA

3

我有一个包含CDATA的XML文件。

我需要更新CDATA,就像这个例子一样。

我在这里修改"span"。

<elements>
    <![CDATA[-div[id|dir|class|align|style],-span[class|align]]]>
  </elements>

应该更新为:
<elements>
    <![CDATA[-div[id|dir|class|align|style],-span[class|align|style]]]>
  </elements>

我正在使用2.0框架..如何使用XmlDocument完成此操作。
谢谢。
3个回答

5

只需获取XmlCDataSection并更改Value属性。这里有一个示例,它使用LINQ查找CData部分,但更改原则相同:

using System;
using System.Linq;
using System.Xml;

class Test
{
    static void Main(string[] args)
    {
        string xml = 
@"<elements>
    <![CDATA[-div[id|dir|class|align|style],-span[class|align]]]>
</elements>";
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        XmlCDataSection cdata = doc.DocumentElement
                                   .ChildNodes
                                   .OfType<XmlCDataSection>()
                                   .First();
        cdata.Value = "-div[id|dir|class|align|style],-span[class|align|style]";
        doc.Save(Console.Out);
    }
}

@sam:实现计算要设置哪些数据的逻辑取决于你。我举例的目的是演示如何更改 CData 部分的值。 - Jon Skeet

4

您需要将cdata作为常规字符串提取,然后使用普通字符串操作(或正则表达式)进行调整,然后再将其重新插入为cdata。这就是cdata部分的性质。


1
这就是文本节点的本质。无论它们是否使用CDATA表达,都没有关系。 - Quentin

1
这行代码更新了 CDATA InnerText。
xmlDoc.DocumentElement.SelectSingleNode("//elements").FirstChild.Value  = 
    "-div[id|dir|class|align|style], span[class|align|style]";

完整代码

string xmlPath = @"C:\yourFolder\yourFile.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
xmlDoc.DocumentElement.SelectSingleNode("//elements").FirstChild.Value  = 
    "-div[id|dir|class|align|style], span[class|align|style]";
xmlDoc.Save(xmlPath);

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