Как удалить тег CDATA XElement? - PullRequest
       7

Как удалить тег CDATA XElement?

1 голос
/ 26 августа 2010

У меня есть некоторый код, который получает немного 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 Ответ

1 голос
/ 26 августа 2010

Попробуйте это:

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);
...