Cómo analizar archivos XML usando PowerShell
-
Use
Select-Xml
para Analizar Archivos XML Usando PowerShell -
Use la Clase
System.Xml.XmlDocument
para Analizar Archivos XML Usando PowerShell -
Use la Clase
System.Xml.XmlTextReader
para Analizar Archivos XML Usando PowerShell - Conclusión

El Lenguaje de Marcado Extensible o formato XML sigue siendo ampliamente utilizado hoy en día. Los archivos de configuración, las fuentes RSS y los archivos de Office son solo algunos ejemplos que utilizan el formato XML.
Analizar XML en PowerShell es una tarea común, a menudo requerida para tareas como extracción de datos, gestión de configuraciones y automatización. Si bien PowerShell ofrece varios métodos para analizar XML, cada método tiene sus fortalezas y casos de uso.
En este artículo, exploraremos tres métodos para analizar XML en PowerShell: utilizando el cmdlet Select-Xml
, la clase System.Xml.XmlDocument
y la clase System.Xml.XmlTextReader
. Proporcionaremos ejemplos y explicaciones detalladas para cada método, destacando su sintaxis, funcionalidad y aplicaciones prácticas.
Use Select-Xml
para Analizar Archivos XML Usando PowerShell
Analizar Elementos XML en PowerShell
Primero, cubramos una de las formas más populares y sencillas de usar PowerShell para analizar XML con Select-XML
. El comando Select-Xml
de PowerShell nos permite proporcionar un archivo o cadena XML y un filtro XPath
para extraer información específica.
Tenemos un archivo XML en muchas PC que nos gustaría analizar con PowerShell. Por ejemplo, cada máquina tiene un nombre, una dirección IP y un elemento Include
que se puede utilizar en un informe.
Ejemplo de XML:
<Computers>
<Computer>
<Name>WINPC-01</Name>
<Ip>127.0.0.1</Ip>
<Include>true</Include>
</Computer>
<Computer>
<Name>WINPC-02</Name>
<Ip>192.168.1.105</Ip>
<Include>false</Include>
</Computer>
<Computer>
<Name>WINPC-03</Name>
<Ip>192.168.1.104</Ip>
<Include>true</Include>
</Computer>
</Computers>
Queremos usar PowerShell para analizar este archivo XML y obtener los nombres de las computadoras. Para hacerlo, podríamos usar el comando Select-XML
.
Por ejemplo, en el archivo anterior, los nombres de computadora aparecen en el texto interno (InnerXML
) del elemento Name
.
Primero proporcionaríamos el XPath
adecuado para encontrar los nombres de las computadoras. Solo los nodos Name
contenidos en los elementos Computer
se devolverían utilizando esta técnica de XPath
.
Código de Ejemplo:
Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }
Usamos Select-Xml
para buscar en el archivo XML ubicado en C:\path\sample.xml
nodos que coincidan con la expresión XPath '/Computers/Computer/Name'
. Esta expresión XPath instruye a PowerShell para seleccionar todos los elementos <Name>
dentro de cada elemento <Computer>
bajo el nodo raíz <Computers>
.
Luego utilizamos el cmdlet ForEach-Object
para iterar sobre los resultados devueltos por el cmdlet Select-Xml
. Dentro de este bucle, accedemos a la propiedad InnerXML
de cada nodo coincidente.
Esta propiedad contiene el contenido de texto interno del elemento XML, lo que nos permite extraer los datos deseados.
Salida:
Analizar Atributos XML en PowerShell
Ahora, adoptemos un nuevo enfoque para localizar los nombres de las computadoras. En lugar de ser representados por elementos XML, los descriptores de las computadoras se expresan directamente a través de atributos XML.
A continuación se muestra un archivo XML de ejemplo con descriptores de computadoras representados con atributos. Ahora podemos ver cada descriptor como un atributo en lugar de un elemento.
Ejemplo de XML:
<Computers>
<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>
Dado que cada descriptor es un atributo, ajustamos el XPath
solo para encontrar los elementos Computer
. Luego, utilizando un cmdlet ForEach-Object
, encontramos el valor del atributo name
.
Código de Ejemplo:
Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }
Usamos Select-Xml
para buscar en el archivo XML ubicado en C:\path\computers-attr.xml
nodos que coincidan con la expresión XPath '/Computers/Computer'
. Esta expresión XPath selecciona todos los elementos <Computer>
bajo el nodo raíz <Computers>
.
Luego utilizamos el cmdlet ForEach-Object
para iterar sobre los resultados; dentro del bucle, accedemos a la propiedad name
de cada nodo coincidente. Esta propiedad representa el valor del atributo name
de cada elemento <Computer>
.
Salida:
Ya sea que estemos leyendo elementos o atributos, la sintaxis de Select-Xml
es engorrosa: nos obliga a utilizar el parámetro XPath
, luego canalizar el resultado a un bucle y, finalmente, buscar los datos bajo la propiedad Node
.
Use la Clase System.Xml.XmlDocument
para Analizar Archivos XML Usando PowerShell
La clase System.Xml.XmlDocument
para analizar XML en PowerShell ofrece una solución versátil y efectiva para manejar datos XML, convirtiéndola en una herramienta valiosa para diversas tareas de automatización, procesamiento de datos y escenarios de gestión de configuraciones.
Este método implica crear una instancia de la clase XmlDocument
, cargar el contenido XML en el objeto del documento y luego navegar a través de los nodos del documento para acceder a los datos deseados.
Código de Ejemplo:
$xmlDocument = New-Object System.Xml.XmlDocument
$xmlDocument.Load("sample.xml")
$computerNodes = $xmlDocument.SelectNodes("//Computer")
foreach ($computerNode in $computerNodes) {
$name = $computerNode.SelectSingleNode("Name").InnerText
Write-Output $name
}
En este fragmento de código, creamos una nueva instancia de la clase System.Xml.XmlDocument
utilizando New-Object
. Luego, cargamos el contenido XML del archivo C:\path\computers.xml
en el objeto $xmlDocument
utilizando el método Load
.
Utilizamos el método SelectNodes
para recuperar todos los elementos <Computer>
en el documento XML.
Luego, iteramos sobre cada nodo <Computer>
usando un bucle foreach
. Dentro del bucle, utilizamos SelectSingleNode
para encontrar el elemento <Name>
dentro de cada nodo <Computer>
y extraer su texto interno utilizando la propiedad InnerText
.
Finalmente, mostramos los nombres de las computadoras utilizando Write-Output
.
Salida:
Use la Clase System.Xml.XmlTextReader
para Analizar Archivos XML Usando PowerShell
Analizar XML en PowerShell utilizando la clase System.Xml.XmlTextReader
ofrece un método sencillo y eficiente en cuanto a memoria para procesar datos XML. Esta clase proporciona un flujo de solo avance y solo lectura que analiza los datos XML de forma eficiente sin cargar todo el documento en la memoria.
Al utilizar el XmlTextReader
, los scripts de PowerShell pueden extraer de manera eficiente elementos o atributos específicos de documentos XML, habilitando tareas como extracción de datos, gestión de configuraciones y automatización.
Código de Ejemplo:
$xmlFilePath = "sample.xml"
$xmlReader = [System.Xml.XmlTextReader]::new($xmlFilePath)
while ($xmlReader.Read()) {
if ($xmlReader.NodeType -eq "Element" -and $xmlReader.Name -eq "Name") {
$name = $xmlReader.ReadString()
Write-Output $name
}
}
En este fragmento de código, especificamos la ruta del archivo XML utilizando la variable $xmlFilePath
. Luego, creamos una nueva instancia de la clase System.Xml.XmlTextReader
y la inicializamos con el contenido XML del archivo especificado por $xmlFilePath
.
Usamos un bucle while
para iterar a través del contenido XML utilizando el método Read
de la clase XmlTextReader
. Dentro del bucle, verificamos si el tipo de nodo actual es un elemento y si su nombre es Name
.
Si se cumplen ambas condiciones, usamos el método ReadString
para extraer el texto interno del elemento <Name>
y lo mostramos utilizando Write-Output
.
Salida:
Conclusión
Analizar XML en PowerShell es una habilidad versátil y esencial para muchas tareas de automatización y procesamiento de datos. Al entender los diversos métodos disponibles, como Select-Xml
, System.Xml.XmlDocument
y System.Xml.XmlTextReader
, los usuarios de PowerShell pueden extraer y manipular datos de manera eficiente a partir de documentos XML para adaptarlos a sus necesidades.
Ya sea analizando elementos o atributos, cada método ofrece sus ventajas, permitiendo que los scripts de PowerShell manejen datos XML de manera efectiva. Al aprovechar estas técnicas de análisis, los usuarios de PowerShell pueden optimizar sus flujos de trabajo y lograr sus objetivos de automatización de manera más eficiente.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn