2010-08-25 6 views
1

J'ai du code qui reçoit du XML et il y a la possibilité qu'un élément tag CDATA soit présent. Un drapeau est passé dans la méthode qui indique si la balise CDATA devrait être présente, si l'indicateur est faux, alors la balise CDATA devrait être enlevée si elle est présente, comment ferais-je ceci sans analyser la requête.Comment supprimer la balise CDATA d'un XElement?

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

Pourquoi voulez-vous de l'enlever? En fait, pourquoi manipulez-vous le CDATA? –

+1

C'est pour un outil d'édition XML. Ce n'est pas que nous manipulons CDATA, l'outil est un médicament de passerelle pour manipuler CDATA. – Eric

Répondre

1

Essayez ceci:

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