I förra månadens kolumn tittade jag på några av de enklare aspekterna av XML, illustrerade med några grundläggande PowerShell-skript. I denna månads kolumn kommer jag att våga mig lite djupare på hur man använder PowerShell med XML.
Du kanske minns från förra månaden att du kan skapa ett XML DOM-dokument genom att skriva en PowerShell-kommandorad ungefär så här:
$orderdoc = [xml] (Cat D:XmlOrder.xml)
Detta förutsätter att en fil som heter order.xml redan finns i mappen D:Xml och att XML-filen i filen är giltig. Vi har tagit fram en giltig fil, som du hittar på www.pcpro.co.uk/links/151dotnet.
I skärmdumpen nedan kan du se detta XML-dokument som det visas med hjälp av gratisprogramverktyget XMLPad. Utvecklad av WMHelp (www.wmhelp.com), XMLPad är ett mycket användbart verktyg när du arbetar med XML, särskilt eftersom det är gratis. Som du kan se innehåller XML-filen en rotnod
Uppdatering av ett XML-dokument
Att uppdatera XML-orderdokumentet med PowerShell är enkelt med objekttyperna .NET XML Document och XML Element. Följande kod läser den befintliga ordern, lägger till en ny rad i ordern och skriver sedan tillbaka den uppdaterade ordern till en ny fil:
#Addline.ps1 – lägger till en beställningsrad i beställningen i d:fooorder.xml
# skriver order till d:foo
eworder.xml
# Steg 1 – skapa dokument i minnet
$doc=[xml] (cat d:fooorder.xml)
# Steg 2 – skapa orderradselement
$ol=$doc.CreateElement(“OrderLine”)
# Steg 3 – skapa och fyll i underobjekt
$Item = $doc.CreateElement(“ItemID”)
$item.Set_InnerText(“876543”)
$Itemd = $doc.CreateElement(“ItemDescription”)
$itemd.Set_InnerText(“Osynliga widgetar”)
$Numordered = $doc.CreateElement(“NumberOrdered”)
$numOrdered.Set_InnerText(“21”)
$Price = $doc.CreateElement(“Pris”)
$price.Set_Innertext(“321.12”)
# Steg 4 – Bygg nu upp orderlinje
$ol.AppendChild($item)
$ol.AppendChild($itemd)
$ol.AppendChild($numordered)
$ol.AppendChild($price)
# Steg 5, slutligen, lägg till beställningsraden i beställningen.
$doc.order.orderlines.appendchild($ol)
#Steg 6 – spara bort dokumentet.
$doc.save(“d:fooNeworder.xml”)
Det finns sex steg för att lägga till beställningsraden. Först öppnas dokumentet och tilldelas $doc. Observera att detta bara lyckas om XML-dokumentet är välformaterat, men för enkelhetens skull har jag utelämnat eventuell felhanteringskod för att återställa från fel i XML. Steg 2 skapar ett nytt tomt XML-element som heter $ol, som representerar en ny orderrad. Elementet skapas med metoden CreateElement i ett XML-dokument. I steg 3 används CreateElement-metoden för att skapa beställningsradens komponentelement ($item, $itemd, $numordered och $price). Metoden Set_InnerText används för att tilldela ett värde till vart och ett av dessa komponentelement. I steg 4 läggs dessa individuella komponenter till $ol-värdet, vilket skapar en helt ny orderrad. Med steg 5 läggs detta nya orderradselement till orderdokumentets orderradselement och slutligen, i steg 6, skrivs den uppdaterade ordern tillbaka till en ny fil som heter (d:foo