Como Analisar Arquivos XML Usando PowerShell

  1. Use o Select-Xml para Analisar Arquivos XML Usando PowerShell
  2. Use a Classe System.Xml.XmlDocument para Analisar Arquivos XML Usando PowerShell
  3. Use a Classe System.Xml.XmlTextReader para Analisar Arquivos XML Usando PowerShell
  4. Conclusão
Como Analisar Arquivos XML Usando PowerShell

O Extensible Markup Language ou formato XML ainda é amplamente utilizado hoje. Arquivos de configuração, feeds RSS e arquivos do Office são apenas alguns exemplos que utilizam o formato XML.

Analisar XML no PowerShell é uma tarefa comum, muitas vezes requerida para tarefas como extração de dados, gerenciamento de configuração e automação. Embora o PowerShell ofereça vários métodos para analisar XML, cada método tem suas forças e casos de uso.

Neste artigo, exploraremos três métodos para analisar XML no PowerShell: usando o cmdlet Select-Xml, a classe System.Xml.XmlDocument e a classe System.Xml.XmlTextReader. Fornecerei exemplos detalhados e explicações para cada método, destacando sua sintaxe, funcionalidade e aplicações práticas.

Use o Select-Xml para Analisar Arquivos XML Usando PowerShell

Analisar Elementos XML do PowerShell

Primeiro, vamos cobrir uma das maneiras mais populares e fáceis de usar PowerShell para analisar XML com Select-XML. O comando Select-Xml do PowerShell nos permite fornecer um arquivo ou string XML e um filtro XPath para extrair informações específicas.

Temos um arquivo XML em muitos PCs que gostaríamos de analisar com PowerShell. Por exemplo, cada máquina tem um nome, um endereço IP e um elemento Include que pode ser usado em um relatório.

Exemplo 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 analisar este arquivo XML e obter os nomes dos computadores. Para isso, poderíamos usar o comando Select-XML.

Por exemplo, no arquivo acima, os nomes dos computadores aparecem no texto interno (InnerXML) do elemento Name.

Primeiro, forneceríamos o XPath apropriado para encontrar os nomes dos computadores. Somente os nós Name contidos nos elementos Computer seriam retornados usando essa técnica de XPath.

Código de Exemplo:

Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }

Usamos Select-Xml para procurar no arquivo XML localizado em C:\path\sample.xml por nós que correspondem à expressão XPath '/Computers/Computer/Name'. Esta expressão XPath instrui o PowerShell a selecionar todos os elementos <Name> dentro de cada elemento <Computer> sob o nó raiz <Computers>.

Em seguida, utilizamos o cmdlet ForEach-Object para iterar sobre os resultados retornados pelo cmdlet Select-Xml. Dentro desse loop, acessamos a propriedade InnerXML de cada nó correspondente.

Essa propriedade contém o conteúdo do texto interno do elemento XML, permitindo-nos extrair os dados desejados.

Saída:

powershell analisar xml - saída 1

Analisar Atributos XML do PowerShell

Agora, vamos adotar uma nova abordagem para localizar os nomes dos computadores. Em vez de serem representados por elementos XML, os descritores dos computadores são expressos diretamente por atributos XML.

Abaixo está um exemplo de arquivo XML com descritores de computador representados por atributos. Agora podemos ver cada descritor como um atributo em vez de um elemento.

Exemplo 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>

Como cada descritor é um atributo, ajuste o XPath apenas para encontrar os elementos Computer. Em seguida, usando um cmdlet ForEach-Object, encontre o valor do atributo name.

Código de Exemplo:

Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }

Usamos Select-Xml para procurar no arquivo XML localizado em C:\path\computers-attr.xml por nós que correspondem à expressão XPath '/Computers/Computer'. Esta expressão XPath seleciona todos os elementos <Computer> sob o nó raiz <Computers>.

Em seguida, utilizamos o cmdlet ForEach-Object para iterar sobre os resultados; dentro do loop, acessamos a propriedade name de cada nó correspondente. Esta propriedade representa o valor do atributo name de cada elemento <Computer>.

Saída:

analisar xml do powershell - saída 2

Seja lendo elementos ou atributos, a sintaxe do Select-Xml é complicada: nos força a usar o parâmetro XPath, depois encadear o resultado em um loop, e finalmente procurar os dados na propriedade Node.

Use a Classe System.Xml.XmlDocument para Analisar Arquivos XML Usando PowerShell

A classe System.Xml.XmlDocument para analisar XML no PowerShell oferece uma solução versátil e eficaz para lidar com dados XML, tornando-a uma ferramenta valiosa para várias tarefas de automação, processamento de dados e cenários de gerenciamento de configuração.

Este método envolve a criação de uma instância da classe XmlDocument, carregando o conteúdo XML no objeto documento e então navegando pelos nós do documento para acessar os dados desejados.

Código de Exemplo:

$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
}

Neste trecho de código, criamos uma nova instância da classe System.Xml.XmlDocument usando New-Object. Em seguida, carregamos o conteúdo XML do arquivo C:\path\computers.xml no objeto $xmlDocument usando o método Load.

Usamos o método SelectNodes para recuperar todos os elementos <Computer> no documento XML.

Depois, iteramos sobre cada nó <Computer> usando um loop foreach. Dentro do loop, usamos SelectSingleNode para encontrar o elemento <Name> dentro de cada nó <Computer> e extrair seu texto interno usando a propriedade InnerText.

Finalmente, output os nomes dos computadores usando Write-Output.

Saída:

parse xml do powershell - saída 3

Use a Classe System.Xml.XmlTextReader para Analisar Arquivos XML Usando PowerShell

Analisar XML no PowerShell usando a classe System.Xml.XmlTextReader oferece um método simples e eficiente em termos de memória para processar dados XML. Esta classe fornece um fluxo somente leitura e avanço único que analisa dados XML de forma eficiente sem carregar todo o documento na memória.

Ao utilizar o XmlTextReader, scripts PowerShell podem extrair eficientemente elementos ou atributos específicos de documentos XML, permitindo tarefas como extração de dados, gerenciamento de configuração e automação.

Código de Exemplo:

$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
    }
}

Neste trecho de código, especificamos o caminho para o arquivo XML usando a variável $xmlFilePath. Em seguida, criamos uma nova instância da classe System.Xml.XmlTextReader e a inicializamos com o conteúdo XML do arquivo especificado por $xmlFilePath.

Usamos um loop while para iterar pelo conteúdo XML usando o método Read da classe XmlTextReader. Dentro do loop, verificamos se o tipo do nó atual é um elemento e se seu nome é Name.

Se ambas as condições forem atendidas, usamos o método ReadString para extrair o texto interno do elemento <Name> e output usando Write-Output.

Saída:

powershell analisar xml - saída 4

Conclusão

Analisar XML no PowerShell é uma habilidade versátil e essencial para muitas tarefas de automação e processamento de dados. Ao entender os vários métodos disponíveis, como Select-Xml, System.Xml.XmlDocument e System.Xml.XmlTextReader, os usuários do PowerShell podem extrair e manipular dados de documentos XML de forma eficiente para atender às suas necessidades.

Seja analisando elementos ou atributos, cada método oferece suas vantagens, permitindo que scripts PowerShell lidem com dados XML de forma eficaz. Ao aproveitar essas técnicas de análise, os usuários do PowerShell podem otimizar seus fluxos de trabalho e alcançar seus objetivos de automação de maneira mais eficiente.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn