首页 > 解决方案 > 获取 XML 文件中字符串的 XPath

问题描述

我有一些非常大的 XML 文件

<Frequency>14400</Frequency> 

它可以在文件中的任何位置,因为所有文件都有不同的架构,所以我无法使用预定义的 XPath 进行搜索。

我只需要找到所有频率 <= 14400 的节点并显示 XPath

很好的例子是我在这里复制的代码,但我需要 XPath 而不是 PATH。

有什么解决办法吗?

Get-ChildItem -Recurse |
    Select-String -Pattern ">60<" |
    group Path |
    select Name
c:\temp\xml.xml :::: /ManagementPack/Monitoring/Discoveries/Discovery/DataSource/Frequency 60
c:\temp\xml2.xml :::: /ManagementPack/Monitoring/Discoveries/Discovery/DataSource/Frequency 100

标签: xmlpowershell

解决方案


使用本地名称XPATH 函数怎么样?

这会忽略命名空间,因此它适用于任何 XML。使用这种技术,您不需要从元素中查找 XPATH(这并不简单)。

适用于您的代码:

[xml]$xml = Get-Content ("<some_path>")
$result = $xml.SelectSingleNode("//*[local-name()='Frequency' and number(text()) <= 1440]")

推荐阅读