2009-12-09 4 views
17

Comment procéder pour supprimer tous les tags de commentaire d'une instance XmlDocument?Comment supprimer tous les tags de commentaire de XmlDocument

Existe-t-il un meilleur moyen que récupérer un XmlNodeList et itérer sur ceux-ci?


    XmlNodeList list = xmlDoc.SelectNodes("//comment()"); 

    foreach(XmlNode node in list) 
    { 
     node.ParentNode.RemoveChild(node); 
    } 
+0

Ça me semble bon. – Dave

Répondre

28

Lorsque vous chargez le fichier XML, vous pouvez utiliser XmlReaderSettings

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.IgnoreComments = true; 
XmlReader reader = XmlReader.Create("...", settings); 
xmlDoc.Load(reader); 

Sur une instance existante, votre solution semble bon.

4

Non c'est à ce sujet, bien que je serais enclin à placer les nœuds dans une liste d'abord. Je ne suis pas sûr de l'implémentation .NET de XmlNodeList mais je sais que les implémentations MSXML précédentes chargeaient la liste de manière paresseuse et le code tel que ci-dessus dans le passé finirait par échouer d'une manière ou d'une autre suite au DOM arbre en cours de modification lorsque la liste est énumérée.

foreach (var node in xml.SelectNodes("//comment()").ToList()) 
    node.ParentNode.RemoveChild(node); 
0

Aujourd'hui, la recherche de la façon comment extraire <!-- --> à partir de Visual Basic pour Applications (non C#), je l'ai trouvé aussi nodeTypeString propriété, mais il faut plus d'espace. Voici un exemple en VBA:

Dim xmldoc As New MSXML2.DOMDocument30 
Dim oNodeList As IXMLDOMSelection 
Dim node As IXMLDOMNode 
Dim i As Long 

Dim FileName As String, FileName1 As String 

FileName = "..." ' Source 
FileName2 = "..." ' Target 

xmldoc.async = False ' ? 
xmldoc.Load FileName 
If (xmldoc.parseError.errorCode <> 0) Then Exit Sub ' or Function 

Set oNodeList = xmldoc.selectNodes("//*") '' all nodes 

For i = 0 To oNodeList.length - 1 
With oNodeList(i) 

    For Each node In .childNodes 
     If node.nodeTypeString = "comment" Then .removeChild node 
    Next 

End With 
Next 

xmldoc.Save FileName2 

Set oNodeList = Nothing ' ? 
Set xmldoc = Nothing 

Il omitts document Haut nœuds de commentaires des parents, mais ils peuvent être récupérés en quelque sorte directement en cas de besoin, par exemple en utilisant With xmldoc.documentElement.childNodes.

Questions connexes