Dnaq
Dnaq

Reputation: 3

Searching xmls with Powershell

How would I use powershell to find the paths in this XML? For example, I need to find the Path for the Application/Name = PSTest AND Environment/Name = DEMO

Here is the sample XML:

    <Applications>
        <Application>
            <Name>PSTest</Name>
            <Environment>
                <Name>DEMO</Name>
                <BuildPath>C:\TEST\TEST</BuildPath>
                <Path>C:\TEST\DEMO\PSTest|C:\TEST\DEMO1\PSTest</Path>
                <BackupPath>C:\TEST\Backup</BackupPath>
            </Environment>
            <Environment>
                <Name>PROD</Name>
                <BuildPath>C:\TEST\DEMO</BuildPath>
                <Path>C:\TEST\PROD\PSTest|C:\TEST\PROD1\PSTest</Path>
                <BackupPath>C:\TEST\Backup\PROD</BackupPath>
            </Environment>
        </Application>  
        <Application>
            <Name>PSTestTwo</Name>
            <Environment>
                <Name>DEMO</Name>
                <BuildPath>C:\TEST\TEST</BuildPath>
                <Path>C:\TEST\DEMO\PSTestTwo|C:\TEST\DEMO1\PSTestTwo</Path>
                <BackupPath>C:\TEST\Backup</BackupPath>
            </Environment>
            <Environment>
                <Name>PROD</Name>
                <BuildPath>C:\TEST\DEMO</BuildPath>
                <Path>C:\TEST\PROD\PSTestTwo|C:\TEST\PROD1\PSTestTwo</Path>
                <BackupPath>C:\TEST\Backup\PROD</BackupPath>
            </Environment>
        </Application>  
    </Applications>

Upvotes: 0

Views: 38

Answers (1)

Alexander Obersht
Alexander Obersht

Reputation: 3275

You can use XPath strings to find and select nodes:

$oXml = [Xml](Get-Content "infile.xml" | Out-String)
$sXPath = '//Application[Name = "PSTest"]/Environment[Name = "DEMO"]'
$sPath = ($oXml.SelectSingleNode($sXPath)).Path
$sPath

Keep in mind that, unlike PowerShell itself, XPath is case-sensitive.

Upvotes: 1

Related Questions