考慮下面的XML文檔:這個XML管道中的null項是什麼?
$xml = [xml] "<root><value>one</value><value>two</value></root>"
,然後打印值(與一些前綴/後綴):
$xml.root.value | %{"*$_*"}
*one*
*two*
到目前爲止好。但是,如果元素不存在,則通過管道傳播空項:
$xml.root.foo | %{"*$_*"}
**
爲什麼會這樣?有沒有辦法避免這種額外的檢查:
$xml.root.foo | ?{$_} | %{"*$_*"}
這很容易忘記,它似乎容易出錯。
我明白了。但是,在我的實際使用案例中,這個示例來自元素確實可能會丟失(這不是錯字),並且我想遍歷所有元素,或者在丟失時不做任何事情。除了我的{$ _}過濾器之外,還有更好的方法嗎? –
2012-04-26 00:14:28
使用PowerShell V1/V2中的XML,如果有多個同名的元素,那麼是的,您必須迭代明確性。在PowerShell V3中,這個問題已經得到解決,所以'$ xml.root.value'輸出'one'和'two'。有些人稱這爲自動展開,有些則稱其爲隱式的foreach。 – 2012-04-26 00:25:03
我有V2,$ xml.root.value的迭代工作正常。我唯一的障礙是,當沒有元素時,我需要拋出逆直覺過濾器來防範$ null。 –
2012-04-26 00:35:18