2013-08-30 34 views
0

這裏是考試XML ..PowerShell的XML查詢

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
    <book> 
     <title>a book</title> 
     <writer>Tom</writer> 
    </book> 
    <book> 
     <title>b book</title> 
     <writer>John</writer> 
    </book> 
    <book> 
     <title>c book</title> 
     <writer>Tom</writer> 
    </book> 
</books> 

我想找到這位作家的名單是湯姆。 所以我的劇本是

[xml]$books = Get-Content C:\Users\Administrator\Documents\books.xml 
$books.book| %{$_.book.writer -match 'Tom'} 

但是這個劇本只顯示作家......

writer 
Tom 
Tom 

我希望看到這樣的

title  writer 
a book  Tom 
c book  Tom 

幫我PLZ。

回答

2

你可能想使用?,又名Where-Object而不是%

$books.book| ?{$_.book.writer -match 'Tom'} 

這是以前的管道元件上的過濾器,限制什麼出來呢,同時與ForEach-Object您正在投射,即創建一個新的對象序列。

雖然你的代碼和輸出沒有意義。首先,$books不應該有book屬性,而是books。你應該看到

True 
False 
True 

代替writer對象,除非有多個每本書writer元素。

+0

哇!非常感謝你。 – user1788012

0

PowerShell的4只使用

$ books.books.book

0

我的意思是寫

select-xml -Path C:\XML\doc2.txt -XPath "//book[writer='Tom']//ancestor::book" 

標題作家

一本書湯姆ç書湯姆

Ernest Brant