[英]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.