Algo por ahí escuche del batch ? , se puede hacer con .net ?
.Net sería la mejor opción o al menos una de las mejores, al ser una solución amistosa, sencilla y extremadamente eficiente, ya que la librería de classes de .Net proporciona miembros muy sofisticados para el parsing y edición de documentos XML, cómo
XElement,
Xmlelement,
XDoc,
XmlDocument, etc, puediendo llevar a cabo la misma tarea de diversas maneras según "X" necesidades (con ciertas excepciones);
sin mencionar que además la IDE
Visual Studio exprime al máximo sus elaboradas características añadiendo acceso inmediato en tiempo de diseño a los miembros del documento XML, con la posibilidad opcional de añadir/activar
IintelliSense (auto completado de los nombres de los miembros del documento XML).
Sin duda la utiización de .Net junto a
Visual Studio le da un significado nuevo y extraordinario a la manipulación programática o automatizada de este tipo de documentos, ya que
Visual Studio marca un antes y un despues practicamente en todo lo relacionado con la experiencia proporcianada al usuario final en comparación con cualquier otra IDE para cualquier otro lenguaje, y aparte, la librería de classes de .Net Framework no tiene rival en cuanto a cantidad de miembros y a su calidad de elaboración (soy muy fan, tenía que escribir todo esto).
El código que te voy a mostrar de ejemplo es algo muy simple, ya que la tarea no requiere más, y de todas formas aquí no se piden tareas, pero bueno...:
Ejemplo, en VisualBasic.Net:
Dim sourceFilepath As String = "C:\source.xml"
Dim targetFilepath As String = "C:\target.xml"
Dim fileEncoding As Encoding = Encoding.Default 'Código de página ANSI del S.O. actual (cp1252 / windows-1252)
Dim fileContent
As String = File.
ReadAllText(sourceFilepath, fileEncoding
)
Dim doc As XDocument = XDocument.Parse(fileContent, LoadOptions.None)
With doc
.Descendants().Where(Function(element As XElement) String.IsNullOrWhiteSpace(element.Value)).Remove()
.Save(targetFilepath, SaveOptions.None)
End With
(declaré esas variables para que no te pierdas)
Documento original:
<?xml version="1.0" encoding="windows-1252"?>
<rootElement>
<!-- empty address field -->
<child1>
<name>X</name>
<adress></adress>
</child1>
<!-- empty element and sub-elements -->
<child2>
<name></name>
<adress></adress>
</child2>
</rootElement>
Resultado de ejecución:
<?xml version="1.0" encoding="Windows-1252"?>
<rootElement>
<!-- empty address field -->
<child1>
<name>X</name>
</child1>
<!-- empty element and sub-elements -->
</rootElement>
Es un ejemplo. En caso de que lo uses ten en cuenta que puedes personalizarlo cómo prefieras, por ejemplo, si tienes elementos hijos con elementos sub-hijos y solo quieres eliminar los sub-hijos vacíos, entonces puedes indicar con una simple condiciónal, que se expresen los elementos hijos vacios en la modificación (
<elemento_hijo_vacio /> ).
PD: También puedes utilizar el módulo xml de
Python, por poner un ejemplo diferente a C#/VB.Net.
Saludos