2017-01-09 153 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