在Powershell中搜索xmls
问题描述:
如何使用powershell查找此XML中的路径?例如,我需要找到应用程序/名的路径= PSTest,环境/名称= DEMO在Powershell中搜索xmls
下面是示例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>
答
您可以使用XPath字符串以查找和选择节点:
$oXml = [Xml](Get-Content "infile.xml" | Out-String)
$sXPath = '//Application[Name = "PSTest"]/Environment[Name = "DEMO"]'
$sPath = ($oXml.SelectSingleNode($sXPath)).Path
$sPath
请记住,与PowerShell本身不同,XPath区分大小写。
不错的答案,即将提出类似的建议。我可能做'$ oXml.SelectSingleNode('// Application [Name =“PSTest”]/Environment [Name =“DEMO”]')。Path',更易于阅读 –
这让我想起我在处理多么糟糕与XML。 )更新了答案,谢谢! –