【问题标题】:How do I remove the CDATA tag of an XElement?如何删除 XElement 的 CDATA 标记?
【发布时间】:2010-08-25 21:25:26
【问题描述】:

我有一些代码接收一些 XML,并且可能会出现 CDATA 标记元素。一个标志被传递到方法中,说明 CDATA 标记是否应该存在,如果标志为 false,则 CDATA 标记如果存在则应删除,如果不解析 query.Value,我将如何做到这一点?

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???
    }
}

【问题讨论】:

  • 为什么要删除它?事实上,你为什么要操纵 CDATA?
  • 这是一个XML编辑工具。不是我们在操纵 CDATA,该工具是操纵 CDATA 的一种门户药物。

标签: c# xml linq-to-xml


【解决方案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);

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多