2009-11-06 66 views
2

我需要使用linq to Xml訪問Address Tag下的值。Linq to XML(我無法訪問標籤之間的值)

<p1:Person> 
    <p2:ID>1</p2:ID> 
    <p2:Name>Qwerty</p2:Name> 
    <p2:Address> 
    <p2:street>1111 abc</p2:street> 
    <p2:road # >9</p2:road #> 
    </p2:Address> 
<p1:Person> 

我寫了一個這樣的查詢

ArrayList nodes = new ArrayList(); 
List<XElement> personNode = xml.Elements().Where(e => e.Name.LocalName == "Person").ToList(); 
foreach (XElement x in personNode) 
{ 
    IEnumerable<XElement> addressNode = x.Elements().Where(e => e.Name.LocalName == "Address"); 
    foreach (XElement x in addressNode) 
    {     
     IEnumerable<XElement> streetNode= x.Elements().Where(e => e.Name.LocalName == "street"); 
     foreach (XElement x1 in streetNode) 
     { 
      Nodes.Add(x1.Value); 
     } 
    } 
} 

這應該給我的街價值節點的ArrayList。但錯誤是接近「addressNode」。沒有值進入addressNode變量。

請在此查詢中輸入一些內容。這將是非常有幫助的。

問候, NewbietoLinq

+1

您能告訴我們一個您想要查詢的XML文檔的樣本嗎? – 2009-11-06 16:23:27

回答

1

貌似你試圖重新使用嵌套foreach循環內x變量。這是否工作?

ArrayList nodes = new ArrayList(); 
List<XElement> personNode = xml.Elements().Where(e => e.Name.LocalName == "Person").ToList(); 
foreach (XElement p in personNode) 
{ 
    IEnumerable<XElement> addressNode = p.Elements().Where(e => e.Name.LocalName == "Address"); 
    foreach (XElement a in addressNode) 
    {     
     IEnumerable<XElement> streetNode= a.Elements().Where(e => e.Name.LocalName == "street"); 
     foreach (XElement s in streetNode) 
     { 
      Nodes.Add(s.Value); 
     } 
    } 
}