xml - 如何使用 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}
而且我有点迷失了如何选择只需要的
解决方案
您需要过滤更低:
$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
推荐阅读
- solr - Solr 提升和 '~' 字符
- java - 如何在 Spring 测试监听器中获取 TestNG ITestResult?
- kotlin - Kotlin 类型安全的类型别名
- php - 如何在 Xcode 中向 PHP 发送当前登录用户的名称
- eclipse - Testng eclipse 远程调试?
- python - 在 Python Pandas 模块中描述函数
- django - 您如何使多对多关系保持最新?
- java - 带有 Java 和 Kotlin 文件、kapt 或 annotationProcessor 的 Android 项目?
- php - 访问 abcd.com 上的字体已被 CORS 策略阻止:没有“访问控制允许来源”
- javascript - 从下拉列表中获取值并返回表单字段