PowerShell: Retrieve a specific internal XML element
14,379
Solution 1
You can use XPath in V1 like this, if you prefer:
$xml = [xml](get-content $xmlFile)
$xml.SelectSingleNode("//Fruit[2]")
Code Name
---- ----
2 Orange
Solution 2
You can access the nodes like objects from Posh V1
$xml = [xml]"<Fruits>
<Fruit>
<Code>1</Code>
<Name>Apple</Name>
</Fruit>
<Fruit>
<Code>2</Code>
<Name>Orange</Name>
</Fruit>
</Fruits>"
$orange = $xml.Fruits.Fruit | ? { [int]$_.Code -eq 2 }
Author by
rkellerm
Updated on June 25, 2022Comments
-
rkellerm almost 2 years
I have an XML document with this structure:
<Fruits> <Fruit> <Code>1</Code> <Name>Apple</Name> </Fruit> </Fruits>
What is the best way to get a
<Fruit>
element by its code (or any other field) in PowerShell 1 code? (Not XPath, as it is supported in PowerShell 2 only)Thanks!
-
rkellerm almost 14 yearsFirst - thank you. When trying to run your script: $xml = [xml]" 1 Apple 2 Orange " $orange = $xml.Fruits.Fruit | ? { [int]$_.Code -eq 2 } it throws an exception: "Error: Cannot find an overload for "XmlNode" and the argument count: "3"." Any idea?
-
stej almost 14 yearsHm, weird. Does
$xml.Fruits.Fruit
return anything? -
stej almost 14 yearsIt's a long time ago I used V1, but I remember that this 'object like' accessing worked. There were some issues, but that won't apply to your example.