2014-04-20 19 views
0

我有一個XDocument對象,我嘗試從中提取指定特定條件的所有List。從XDocument中使用where子句提取XElements的列表

以下是我的XML

<MyQueue xmlns:ns0 = "http://myprogram"> 
    <ns0:QueueReport> 
     <ns0:number>001</ns0:number> 
     <ns0:id>A</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>1</ns0:hours> 
    </ns0:QueueReport> 
    <ns0:QueueReport> 
     <ns0:number>001</ns0:number> 
     <ns0:id>B</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>2</ns0:hours> 
    </ns0:QueueReport> 
    <ns0:QueueReport> 
     <ns0:number>001</ns0:number> 
     <ns0:id>B</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>10</ns0:hours> 
    </ns0:QueueReport> 
    <ns0:QueueReport> 
     <ns0:number>002</ns0:number> 
     <ns0:id>A</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>12</ns0:hours> 
    </ns0:QueueReport> 
    <ns0:QueueReport> 
     <ns0:number>003</ns0:number> 
     <ns0:id>A</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>20</ns0:hours> 
    </ns0:QueueReport> 
</ns0:MyQueue> 

上述XML是在XDocument對象XDOC說。我寫了以下內容以提取節點及其子節點。

XNamespace b = @"http://myprogram"; 
var elements = from e xdoc.Elements(b + "MyQueue") 
     where e.Element(b + "QueueReport").Element(b + "number").Value == "001" 
     && e.Element(b + "QueueReport").Element(b + "id").Value == "B" 
     select e.Elements(b + "QueueReport").ToList(); 

(請原諒錯別字,如果任何代碼,它不是在編輯器中寫的)

元素變量沒有任何結果,理想我本來預計在下面的兩個元素名單。

<ns0:QueueReport> 
    <ns0:number>001</ns0:number> 
    <ns0:id>B</ns0:id> 
    <ns0:name>ABC</ns0:name> 
    <ns0:hours>2</ns0:hours> 
</ns0:QueueReport> 

    <ns0:QueueReport> 
     <ns0:number>001</ns0:number> 
     <ns0:id>B</ns0:id> 
     <ns0:name>ABC</ns0:name> 
     <ns0:hours>10</ns0:hours> 
    </ns0:QueueReport> 

請大家幫忙,我對Linq很陌生,對於怎樣才能做到這一點還有點線索。

+0

我得到這個工作,只是爲了記錄這對於任何將來使用,並且在這裏回答這個問題是。 – user2179891

回答

0

這裏是回答我的問題,我能得到這樣一些頭腦彎曲工作..

XNamespace b = @"http://myprogram"; 
var elements = from e xdoc.Elements(b + "MyQueue").(b + "QueueReport") 
    where e.Element(b + "number").Value == "001" 
    && e.Element(b + "id").Value == "B" 
    select e;