过滤XML属性

时间:2017-01-09 13:11:15

标签: xml powershell xpath filtering

我在下面有这个脚本,根据属性value筛选出xml列表:

gci $path | Select-Xml -XPATH "//Order[contains(@Value, '0')]"

我正在尝试过滤掉“零值”的XML。问题是,当我针对我的源运行脚本时,它返回值中包含“0”的所有内容。如何将过滤器更改为仅过滤“0”,即。没有大于零的值?我想有一个过滤器可以将“包含”替换为“匹配”之类的东西,但我已经尝试过了。在互联网上找不到任何替代品。

1 个答案:

答案 0 :(得分:1)

使用Where-Object条件-not过滤器排除XPath表达式产生匹配的所有文件:

Get-ChildItem $path | Where-Object {
  -not (Select-Xml -Path $_.FullName -XPath "//Order[contains(@value, '0')]")
}

请注意,这可能会产生错误否定(例如,如果属性value包含类似10,201,......的值)。如果您只想排除属性value正好为0的文件,则可以使用数字比较来执行此操作:

Get-ChildItem $path | Where-Object {
  -not (Select-Xml -Path $_.FullName -XPath "//Order[@value = 0]"
}