read - write xml c#
Cómo eliminar todas las etiquetas de comentario de XmlDocument (3)
Cuando carga el xml, puede usar XmlReaderSettings
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("...", settings);
xmlDoc.Load(reader);
En una instancia existente, su solución se ve bien.
¿Cómo hago para eliminar todas las etiquetas de comentarios de una instancia de XmlDocument?
¿Hay una forma mejor que recuperar un XmlNodeList e iterar sobre ellos?
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
{
node.ParentNode.RemoveChild(node);
}
Hoy, buscando la forma de extraer <!-- -->
de Visual Basic para aplicaciones (no C #), también encontré la propiedad nodeTypeString , pero ocupa más espacio. Aquí hay un ejemplo 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
Omite los principales nodos de comentarios principales del documento, pero se pueden recuperar de alguna manera directamente si es necesario, por ejemplo, con With xmldoc.documentElement.childNodes
No, eso es todo, aunque estaría inclinado a colocar los nodos en una Lista primero.
No estoy seguro de la implementación .NET de XmlNodeList
pero sé que las implementaciones anteriores de MSXML cargaron la lista de manera perezosa y el código como el anterior en el pasado terminaría fallando de alguna manera como resultado de la modificación del árbol DOM como Se enumera la lista.
foreach (var node in xml.SelectNodes("//comment()").ToList())
node.ParentNode.RemoveChild(node);