Più XML con PowerShell

eworder.xml).

Lo screenshot sopra mostra il risultato del taglio e incolla di questo script nella console di PowerShell. Uno degli aspetti utili di questa operazione è che puoi esaminare i singoli elementi utilizzati per aggiornare il documento.

Digitando $ol nella console di PowerShell viene visualizzata la nuova riga d'ordine aggiunta all'ordine e, come ho mostrato nell'articolo del mese scorso, i sottoelementi di questa riga d'ordine sono direttamente indirizzabili: $ol. ItemID fornisce il numero di parte, mentre $ol. NumberOrdered fornisce il numero di articoli ordinati, come segue:

PSH [D: foo]: $ol.itemid

876543

PSH [D: foo]: $ol.numberordered

21

PSH [D: foo]:

Estensioni della comunità PowerShell

Uno degli aspetti più potenti di PowerShell è il modo in cui la community può aggiungere componenti forniti da Microsoft. Puoi scrivere le tue estensioni o utilizzare quelle già create da alcuni dei guru di PowerShell davvero intelligenti. Puoi scaricarli da CodePlex all'indirizzo http://tinyurl.com/ywk28h.

Uno dei cmdlet più interessanti nelle estensioni della community è il cmdlet Format-XML. È possibile utilizzare questo cmdlet per visualizzare l'XML creato in precedenza, come segue:

PSH [D: foo]: $ol.get_outerxml()

876543Widget invisibili21321

.12

PSH [D: foo]:

PSH [D: foo]: format-xml -input ($ol.get_outerxml())

876543

Widget invisibili

21

321.12

PSH [D: foo]:

PSH [D: foo]: $ol.get_innerxml()

876543Widget invisibili21321.12

PSH [D: foo]:

PSH [D: foo]: format-xml -input ($ol.get_innerxml())

876543

Widget invisibili

21

321.12

PSH [D: foo]:

Come puoi vedere, digitando $ol.get_outerXML() PowerShell visualizza l'XML completo per la riga dell'ordine appena aggiunta, mentre $ol.get_innerXML() ottiene il XML interno e applicando anche il cmdlet Format-XML, è possibile esaminare l'XML esterno ed interno completo per questa riga d'ordine appena creata con il rientro corretto modulo.

Un altro cmdlet utile nel pacchetto Community Extensions è il cmdlet Test-XML, che verifica la validità di un file XML e può facoltativamente convalidare un documento rispetto a uno schema XML denominato. Test-XML esegue una serie di test di base, restituendo un semplice true se l'XML è ben formato (e facoltativamente validato rispetto allo schema), o false in caso contrario. È possibile utilizzare l'opzione Verbose quando si chiama Test-XML per segnalare eventuali errori rilevati.

Come notato sul sito Community Extensions, questo cmdlet Test-XML è ancora in fase di sviluppo, ma sicuramente rileva già una serie di errori.

Lettori XML in PowerShell

Negli esempi che ho mostrato finora, il caricamento del file XML utilizzando il metodo DOM (Document Object Model) è stato semplice e semplifica la codifica. Tuttavia, c’è uno svantaggio nel fare le cose in modo DOM: non è particolarmente efficiente. Con DOM, PowerShell deve prima caricare l'intero file in memoria e quindi creare un documento XML che rappresenti l'intero file, completo del sovraccarico del formato XML DOM.

Un metodo molto più efficiente per elaborare i documenti XML consiste nell'utilizzare la classe XML Reader, che scorre il documento un elemento alla volta invece di caricare l'intero contenuto in memoria una volta. Ecco un semplice esempio utilizzando la classe chiamata loop-xml: