在Powershell中查询XML文件以获取值

时间:2014-10-21 12:36:09

标签: xml powershell

您好我正在尝试使用powershell

在XML文件中查询Displayname
<DeploymentConfiguration PackageId="dce78f0d-d8d4-4a89-9f5d-c37fbf95ee7a" DisplayName="Beyond-Compare-3-3-8" IgnorableNamespaces="" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration">

我确实尝试了

$Xml = Select-Xml -Path "C:\temp\Beyond-Compare-3-3-8_DeploymentConfig.xml"  -Namespace $Namespace -XPath "DisplayName=" 

我收到错误

  

Select-Xml:无法验证参数&#39;命名空间&#39;的参数。参数为null或空。提供一个参数   不为null或为空,然后再次尝试该命令。   在行:1字符:191   + ... l&#34; -Namespace $ Namespace -XPath&#34; DisplayName =&#34;   + ~~~~~~~~~~       + CategoryInfo:InvalidData:(:) [Select-Xml],ParameterBindingValidationException       + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SelectXmlCommand

2 个答案:

答案 0 :(得分:1)

首先,由于节点未关闭,因此您的xml无效。这是一个有效的版本:

<DeploymentConfiguration PackageId="dce78f0d-d8d4-4a89-9f5d-c37fbf95ee7a" DisplayName="Beyond-Compare-3-3-8" IgnorableNamespaces="" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration"/>

现在在powershell中:

[xml]$xml = Get-content c:\path\xmlFile.xml
$DisplayName= $xml.DeploymentConfiguration.Displayname

答案 1 :(得分:0)

使用相同的方法,您需要注册映射到默认命名空间URI的前缀,将映射作为-Namespace参数传递,并在XPath中使用此示例中的已注册前缀 - ns。您尝试的XPath表达式也无效:

$Namespace = @{ ns = 'http://schemas.microsoft.com/appv/2010/deploymentconfiguration'; };
$Xml = Select-Xml -Path "C:\temp\Beyond-Compare-3-3-8_DeploymentConfig.xml"  -Namespace $Namespace -XPath "//ns:DeploymentConfiguration/@DisplayName"