我有一个带有这样的节点的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}
我有点迷失了如何只选择需要的东西
答案 0 :(得分:0)
您需要过滤更低的位置:
$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