2017-01-09 135 views
0

我有此脚本筛选出基于属性value个XML列表如下,其中:过滤XML属性

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

我试图筛选出了“零值”那些个XML。问题是,当我对源代码运行脚本时,它会返回值为“0”的所有内容。我怎样才能改变过滤器只过滤“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]" 
} 
+0

谢谢Ansgar。现在我已经找到了一种替代方法:$ All1 = gci $ path | Select-Xml -XPATH // Order | Select-Object -ExpandProperty节点 $ Filtered = $ All | Where {$ _。Lines -eq“0”} – JDGEEK