在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区分大小写。

+1

不错的答案,即将提出类似的建议。我可能做'$ oXml.SelectSingleNode('// Application [Name =“PSTest”]/Environment [Name =“DEMO”]')。Path',更易于阅读 –

+0

这让我想起我在处理多么糟糕与XML。 )更新了答案,谢谢! –