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 }
Share:
14,379
rkellerm
Author by

rkellerm

Updated on June 25, 2022

Comments

  • rkellerm
    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
    rkellerm almost 14 years
    First - 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
    stej almost 14 years
    Hm, weird. Does $xml.Fruits.Fruit return anything?
  • stej
    stej almost 14 years
    It'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.