在 Powershell 中查询 XML 文件中的值

Posted

技术标签:

【中文标题】在 Powershell 中查询 XML 文件中的值【英文标题】:Query XML file for a value in Powershell 【发布时间】:2014-12-16 16:33:28 【问题描述】:

您好,我正在尝试使用 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:无法验证参数“命名空间”上的参数。参数为 null 或空。提供一个论证 不为空或为空,然后重试该命令。 在行:1 字符:191 + ... l" -命名空间 $命名空间 -XPath "DisplayName=" + ~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Select-Xml], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SelectXmlCommand

【问题讨论】:

该错误意味着您的变量 $Namespace 为空或为空 对不起,我只是在编辑帖子以包含 XML 文件,我只需要语法来查询什么显示名称值 = 并设置为变量 【参考方案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

【讨论】:

100% 有效,非常感谢您的时间和帮助。【参考方案2】:

使用相同的方法,您需要注册映射到默认命名空间 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" 

【讨论】:

以上是关于在 Powershell 中查询 XML 文件中的值的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 中非常大的 XML 文件

输出到 XML 的 SQL 查询

在 Powershell 中从非常大的 XML 文件中删除节点

使用 PowerShell 比较文件夹和内容

如何在 PowerShell 中使用 XmlReader 流式传输大/巨大的 XML 文件?

无法在 PowerShell 中完全解析 XML