2010-08-25 51 views
1

我有一些接收一些XML的代码,并且存在CDATA标记元素存在的可能性。一个标志被传递到方法中,说明CDATA标签是否应该存在,如果标志为false,那么CDATA标签应该被删除(如果存在),我将如何做到这一点而不解析查询。值?如何删除XElement的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??? 
    } 
} 
+0

你为什么要删除它?事实上,你为什么操纵CDATA呢? – 2010-08-25 21:27:47

+1

这是一个XML编辑工具。这不是我们操纵CDATA,这个工具是操纵CDATA的门户药物。 – Eric 2010-08-25 21:45:36

回答

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