繁体   English   中英

Powershell XML 从另一个属性中获取具有特定值的属性值

[英]Powershell XML get attribute value with specific value from another attribute

嗨,我是 Powershell 的新手,我正在尝试在某些条件下读取 xml 文件,这是文件

<file>
     <userlist>
         <user name="Martin" log="mr.martin@mail.com"></user>
         <user name="Tec" log="mr.tec@mail.com"></user>
         <user name="Obama" log="mr.obama@mail.com"></user>
     </userlist>
</file> 

我想要做的是从特定日志中获取我的名字的变量。 例如,如果 log = mr.martin@mail.com,则获取名称我尝试的是这个

$PathXML="Path\conf.xml"
 $xml = New-Object -TypeName XML
 $xml.Load($PathXML)
$name = $xml.file.userlist.user | Select-Object -Property name | where log -eq "mr.martin@mail.com"

问题是它返回我的日志而不是我的名字。 在此先感谢您的帮助。

编辑它不会返回我的日志,但这个 @{name=Martin}

编辑 V2

经过更多研究后,我发现我的结果是一个哈希表,所以我所要做的就是得到这个名字:

$var = $name.name

我会使用 XPath。 这个直接获取name属性:

$name = $xml.SelectSingleNode('//user[@log = "mr.martin@mail.com"]/@name')
Write-Host $name

这个得到匹配的<user>元素:

$name = $xml.SelectSingleNode('//user[@log = "mr.martin@mail.com"]')
Write-Host $user.name

如果没有Select ,您的方法会更好:

$user = $xml.file.userlist.user | where log -eq "mr.martin@mail.com"
Write-Host $user.name

通过像这样的简单查询,使用 PowerShell 的工具将与 XPath 大致相当,但是当事情变得更复杂时,XPath 将很快领先。 这就是为什么我通常从一开始就使用 XPath 的原因。 此外,XPath 将比 PowerShell 管道更快,这可能与更大的 XML 文件相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM