Share via


Selecting an XML Element by #text value

This is actually just a wrapper for the [text()=’value’] XPATH attribute.  As I said in a previous post, this blog is my own knowledge base.  When I need this, and I’m sure I will, I’ll remember writing this entry, search my blog, and there it is!

This will be used in a subsequent post about getting the hashed credentials string out of an RDG file.

 function Select-ElementByText
{
    param (
        [Parameter(ValueFromPipeline=$true)][String[]]$Name,
        [Parameter()]$Path
    );

    begin
    {
        if (!$Path)
        {
            Write-Warning "$($MyInvocation.MyCommand.Name) -Path not specified.  Stopping.";
            break __outOfScript;
        } # if (!$Path)

        if (!(Test-Path -Path $Path))
        {
            Write-Warning "$($MyInvocation.MyCommand.Name) -Path '$Path' not found. Stopping.";
            break __outOfScript;
        } # if (!(Test-Path -Path $Path))

        if (!($xml = (Get-Content $Path) -as [xml]))
        {
            Write-Warning "$($MyInvocation.MyCommand.Name) -Path '$Path' cannot be parsed as XML.  Stopping.";
            break __outOfScript;
        } # if (!($xml = (Get-Content $Path) -as [xml]))

    } # begin

    process
    {
        foreach ($myName in $Name)
        {
            $xml.SelectNodes("//*[text()='$myName']");
        } # foreach ($myName in $Name)

    }
    # process

} # function Select-ElementByText