Come analizzare file XML utilizzando PowerShell

  1. Usa Select-Xml per Analizzare File XML Utilizzando PowerShell
  2. Usa la Classe System.Xml.XmlDocument per Analizzare File XML Utilizzando PowerShell
  3. Usa la Classe System.Xml.XmlTextReader per Analizzare File XML Utilizzando PowerShell
  4. Conclusione
Come analizzare file XML utilizzando PowerShell

Il Linguaggio di Marcatura Estensibile o formato XML è ancora ampiamente utilizzato oggi. I file di configurazione, i feed RSS e i file di Office sono solo alcuni esempi che utilizzano il formato XML.

L’analisi dell’XML in PowerShell è un’attività comune, spesso necessaria per compiti come l’estrazione di dati, la gestione della configurazione e l’automazione. Sebbene PowerShell offra diversi metodi per analizzare l’XML, ogni metodo ha i suoi punti di forza e casi d’uso.

In questo articolo esploreremo tre metodi per analizzare l’XML in PowerShell: utilizzando il cmdlet Select-Xml, la classe System.Xml.XmlDocument e la classe System.Xml.XmlTextReader. Forniremo esempi dettagliati e spiegazioni per ogni metodo, evidenziando la loro sintassi, funzionalità e applicazioni pratiche.

Usa Select-Xml per Analizzare File XML Utilizzando PowerShell

Analizza Elementi XML di PowerShell

Innanzitutto, copriamo uno dei modi più popolari e semplici per utilizzare PowerShell per analizzare l’XML con Select-XML. Il comando Select-Xml di PowerShell ci consente di fornire un file o una stringa XML e un filtro XPath per estrarre informazioni specifiche.

Abbiamo un file XML su molti PC che vorremmo analizzare con PowerShell. Ad esempio, ogni macchina ha un nome, un indirizzo IP e un elemento Include che può essere utilizzato in un rapporto.

Esempio di 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>

Vogliamo utilizzare PowerShell per analizzare questo file XML e ottenere i nomi dei computer. Per farlo, potremmo usare il comando Select-XML.

Ad esempio, nel file sopra, i nomi dei computer appaiono nel testo interno (InnerXML) dell’elemento Name.

Prima forniremmo il corretto XPath per trovare i nomi dei computer. Solo i nodi Name contenuti negli elementi Computer verrebbero restituiti utilizzando questa tecnica XPath.

Codice di esempio:

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

Usiamo Select-Xml per cercare nel file XML situato in C:\path\sample.xml i nodi corrispondenti all’espressione XPath '/Computers/Computer/Name'. Questa espressione XPath istruisce PowerShell a selezionare tutti gli elementi <Name> all’interno di ciascun elemento <Computer> sotto il nodo radice <Computers>.

Poi utilizziamo il cmdlet ForEach-Object per iterare sui risultati restituiti dal cmdlet Select-Xml. All’interno di questo ciclo, accediamo alla proprietà InnerXML di ogni nodo corrispondente.

Questa proprietà contiene il contenuto del testo interno dell’elemento XML, permettendoci di estrarre i dati desiderati.

Output:

powershell analizza xml - output 1

Analizza Attributi XML di PowerShell

Ora, prendiamo un nuovo approccio per individuare i nomi dei computer. Invece di essere rappresentati da elementi XML, i descrittori dei computer sono espressi direttamente da attributi XML.

Di seguito è riportato un esempio di file XML con descrittori di computer rappresentati da attributi. Possiamo ora vedere ogni descrittore come un attributo piuttosto che come un elemento.

Esempio di 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>

Poiché ogni descrittore è un attributo, modifica l’XPath solo per trovare gli elementi Computer. Quindi, utilizzando un cmdlet ForEach-Object, trova il valore dell’attributo name.

Codice di esempio:

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

Usiamo Select-Xml per cercare nel file XML situato in C:\path\computers-attr.xml i nodi corrispondenti all’espressione XPath '/Computers/Computer'. Questa espressione XPath seleziona tutti gli elementi <Computer> sotto il nodo radice <Computers>.

Poi utilizziamo il cmdlet ForEach-Object per iterare sui risultati; all’interno del ciclo, accediamo alla proprietà name di ogni nodo corrispondente. Questa proprietà rappresenta il valore dell’attributo name di ciascun elemento <Computer>.

Output:

powershell analizza xml - output 2

Che stiamo leggendo elementi o attributi, la sintassi di Select-Xml è scomoda: ci costringe a utilizzare il parametro XPath, poi a piping il risultato a un ciclo e infine a cercare i dati sotto la proprietà Node.

Usa la Classe System.Xml.XmlDocument per Analizzare File XML Utilizzando PowerShell

La classe System.Xml.XmlDocument per analizzare l’XML in PowerShell offre una soluzione versatile ed efficace per gestire i dati XML, rendendola uno strumento prezioso per vari compiti di automazione, elaborazione dei dati e gestione della configurazione.

Questo metodo comporta la creazione di un’istanza della classe XmlDocument, il caricamento del contenuto XML nell’oggetto documento e quindi la navigazione attraverso i nodi del documento per accedere ai dati desiderati.

Codice di esempio:

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

In questo frammento di codice, creiamo una nuova istanza della classe System.Xml.XmlDocument utilizzando New-Object. Poi carichiamo il contenuto XML dal file C:\path\computers.xml dentro l’oggetto $xmlDocument utilizzando il metodo Load.

Usiamo il metodo SelectNodes per recuperare tutti gli elementi <Computer> nel documento XML.

Poi, iteriamo su ogni nodo <Computer> utilizzando un ciclo foreach. All’interno del ciclo, usiamo SelectSingleNode per trovare l’elemento <Name> all’interno di ogni nodo <Computer> e estrarre il suo testo interno utilizzando la proprietà InnerText.

Infine, usiamo Write-Output per stampare i nomi dei computer.

Output:

powershell analizza xml - uscita 3

Usa la Classe System.Xml.XmlTextReader per Analizzare File XML Utilizzando PowerShell

Analizzare l’XML in PowerShell utilizzando la classe System.Xml.XmlTextReader offre un metodo semplice ed efficiente in termini di memoria per elaborare i dati XML. Questa classe fornisce uno stream in sola lettura, solo in avanti, che analizza i dati XML in modo efficiente senza caricare l’intero documento in memoria.

Utilizzando XmlTextReader, gli script di PowerShell possono estrarre in modo efficiente elementi o attributi specifici dai documenti XML, abilitando compiti come l’estrazione di dati, la gestione della configurazione e l’automazione.

Codice di esempio:

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

In questo frammento di codice, specifichiamo il percorso al file XML utilizzando la variabile $xmlFilePath. Poi creiamo una nuova istanza della classe System.Xml.XmlTextReader e la inizializziamo con il contenuto XML dal file specificato da $xmlFilePath.

Usiamo un ciclo while per iterare attraverso il contenuto XML utilizzando il metodo Read della classe XmlTextReader. All’interno del ciclo, verifichiamo se il tipo di nodo corrente è un elemento e se il suo nome è Name.

Se entrambe le condizioni sono soddisfatte, utilizziamo il metodo ReadString per estrarre il testo interno dell’elemento <Name> e stamparlo utilizzando Write-Output.

Output:

powershell analizza xml - output 4

Conclusione

Analizzare l’XML in PowerShell è un’abilità versatile ed essenziale per molti compiti di automazione e elaborazione dei dati. Comprendendo i vari metodi disponibili, come Select-Xml, System.Xml.XmlDocument e System.Xml.XmlTextReader, gli utenti di PowerShell possono estrarre e manipolare efficientemente i dati dai documenti XML per soddisfare le proprie esigenze.

Che si tratti di analizzare elementi o attributi, ciascun metodo offre i suoi vantaggi, consentendo agli script di PowerShell di gestire i dati XML in modo efficace. Sfruttando queste tecniche di analisi, gli utenti di PowerShell possono semplificare i loro flussi di lavoro e raggiungere i loro obiettivi di automazione in modo più efficiente.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
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