【问题标题】:Powershell XML get attribute value with specific value from another attributePowershell XML从另一个属性获取具有特定值的属性值
【发布时间】:2021-03-17 09:07:26
【问题描述】:

您好,我是 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

经过更多研究,我发现我的结果是一个 Hashtable,所以我所要做的就是:

$var = $name.name

【问题讨论】:

    标签: xml powershell attributes


    【解决方案1】:

    我会使用 XPath。这个直接得到name属性:

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

    这个得到匹配的&lt;user&gt;元素:

    $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 文件相关。

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多