首页 > 解决方案 > 如何使用 PowerShell 从 xml 文件的子节点获取信息

问题描述

我有一个带有如下节点的 xml 文件:

<xml>
  <n n="GUID1" t="folder">   
    <a n="name" v="smthng1" />
    <a n="path" v="/abc/QWERTY/ghi" /> 
  </n>
  <n n="GUID2" t="folder">   
    <a n="name" v="smthng2" />
    <a n="path" v="/abc/def/ghi" />
  </n>
</xml>

我需要从第一个节点获取 GUID,但前提是路径节点中没有“QWERTY”。

我正在使用此脚本获取所有指南:

$Files_xml = [System.Xml.XmlDocument](Get-Content "C:\Files.xml")
[System.Collections.ArrayList] $Files_links = @()
select-xml -xpath "//n[@t='folder']" -xml $Files_xml |  foreach {$Files_links += $_.Node.Attributes.GetNamedItem('n').Value}

而且我有点迷失了如何选择只需要的

标签: xmlpowershell

解决方案


您需要过滤更低:

$xml = [xml](Get-Content -Path C:\Files.xml)
$links = $xml.SelectNodes(
    '//n[@t="folder" and a[@n="path" and not(contains(@v, "QWERTY"))]]/@n'
)

如果您更喜欢使用Select-Xml

$selectXmlParams = @{
    'XPath'       = '//n[@t="folder" and a[@n="path" and not(contains(@v, "QWERTY"))]]/@n'
    'LiteralPath' = 'C:\Files.xml'
}
$links = Select-Xml @selectXmlParams

推荐阅读