<!-- file.xml --> <people> <person id="101"> <name>Jon Lajoie</name> <age>22</age> </person> <person id="102"> <name>Lord Gaben</name> <age>65</age> </person> <person id="103"> <name>Gordon Freeman</name> <age>29</age> </person> </people> Loading an XML File
To load an XML file, you can use any of these:
# First Method $xdoc = New-Object System.Xml.XmlDocument $file = Resolve-Path(".\file.xml") $xdoc.load($file) # Second Method [xml] $xdoc = Get-Content ".\file.xml" # Third Method $xdoc = [xml] (Get-Content ".\file.xml") Accessing XML as Objects
PS C:\> $xml = [xml](Get-Content file.xml) PS C:\> $xml PS C:\> $xml.people person -------- {Jon Lajoie, Lord Gaben, Gordon Freeman} PS C:\> $xml.people.person id name age -- ---- --- 101 Jon Lajoie 22 102 Lord Gaben 65 103 Gordon Freeman 29 PS C:\> $xml.people.person[0].name Jon Lajoie PS C:\> $xml.people.person[1].age 65 PS C:\> $xml.people.person[2].id 103 Accessing XML with XPath
PS C:\> $xml = [xml](Get-Content file.xml) PS C:\> $xml PS C:\> $xml.SelectNodes("//people") person -------- {Jon Lajoie, Lord Gaben, Gordon Freeman} PS C:\> $xml.SelectNodes("//people//person") id name age -- ---- --- 101 Jon Lajoie 22 102 Lord Gaben 65 103 Gordon Freeman 29 PS C:\> $xml.SelectSingleNode("people//person[1]//name") Jon Lajoie PS C:\> $xml.SelectSingleNode("people//person[2]//age") 65 PS C:\> $xml.SelectSingleNode("people//person[3]//@id") 103 Accessing XML containing namespaces with XPath
PS C:\> [xml]$xml = @" <ns:people xmlns:ns="http://schemas.xmlsoap.org/soap/envelope/"> <ns:person id="101"> <ns:name>Jon Lajoie</ns:name> </ns:person> <ns:person id="102"> <ns:name>Lord Gaben</ns:name> </ns:person> <ns:person id="103"> <ns:name>Gordon Freeman</ns:name> </ns:person> </ns:people> "@ PS C:\> $ns = new-object Xml.XmlNamespaceManager $xml.NameTable PS C:\> $ns.AddNamespace("ns", $xml.DocumentElement.NamespaceURI) PS C:\> $xml.SelectNodes("//ns:people/ns:person", $ns) id name -- ---- 101 Jon Lajoie 102 Lord Gaben 103 Gordon Freeman