如何删除XElement的CDATA标记?

时间:2010-08-25 21:25:27

标签: c# xml linq-to-xml

我有一些接收一些XML的代码,并且可能存在CDATA标记元素。将一个标志传递给方法,该方法指出CDATA标签是否应该存在,如果标志为false,则应该删除CDATA标签(如果存在),如何在不解析查询的情况下执行此操作。值?

private static void CDataTagUtility(XmlDocument catalog, XElement newData, bool addCdataTag)
{
    XElement query = newData.Element("Query").Element("CommandText");
    if (addCdataTag)
    {
        XmlCDataSection encapsulatedQuery = catalog.CreateCDataSection(query.Value);
        try
        {
            query.SetValue(encapsulatedQuery.OuterXml);
        }
        catch (ArgumentException exc) { /*Thrown due to CDATA tag already present - ignore*/ }
    }
    else //check for cdata tag - remove if present
    {
        //How do I remove the CDATA encapsulation tag???
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个:

static void RemoveCdata(XmlNode root)
{
    foreach (XmlNode n in root.ChildNodes)
    {
        if (n.NodeType == XmlNodeType.CDATA)
            root.RemoveChild(n);
        else if (n.NodeType == XmlNodeType.Element)
            RemoveCdata(n);
    }
}

...

RemoveCdata(query);