2011-05-03 59 views
0

這一個是我的XML另一個簡單的LINQ to XML查詢

Dim X = <BODY> 
    <HEAD1> 
    <Eyes>BLUE</Eyes> 
    </HEAD1> 
    <HEAD2> 
    <Eyes>BROWN</Eyes> 
    </HEAD2> 
    </BODY> 

直到現在我設法拿到了HEAD部分。 現在我該如何在HEAD部件中迭代?

Dim HEADS = From element In X.Elements Select element.Name.LocalName 
For Each c In HEADS 
    Dim Local As String = c 
    Dim COLORSofEYES = SELECT child nodes WHERE c 'Something like that i guess 
Next 

上述應在第一iterattion <Eyes>BLUE</Eyes>返回作爲ElementNodeType和在第二<Eyes>BROWN</Eyes>

回答

0

找到了!

Dim COLORSofEYES = From d In X.Descendants(Local).Descendants Select d 
+0

您可以標記自己的答案是正確的:) – 2011-05-09 11:42:21

1

下面的代碼(在C#):

 var x = XElement.Parse(
      @"<BODY>  
       <HEAD1>  <Eyes>BLUE</Eyes> </HEAD1>  
       <HEAD2>  <Eyes>BROWN</Eyes> </HEAD2> </BODY>"); 

     foreach(var head in x.Elements()) 
     { 
      Console.WriteLine("head: {0}, eyes' colour: {1}", head.Name.LocalName, head.Element("Eyes").Value); 
     } 

將產生以下輸出:

head: HEAD1, eyes' colour: BLUE 
head: HEAD2, eyes' colour: BROWN 

我的理解是你想要的。

0

這是一種奇怪的格式。我不確定你想要迭代的是什麼。如果你只是想遍歷所有<Eyes>,你可能只是這樣做:

Dim query = X...<Eyes> 

否則,如果你只是想每一個<HEAD...>的所有的孩子,你可以這樣做:

Dim query = X.Elements.SelectMany(Function(e) e.Elements) 

或者使用XPath:

Dim query = X.XPathSelectElements("/*/*") 
0

,你可以在一個單一的LINQ查詢寫

C#

IEnumerable<XElement> de = from p in xmlTree.Elements().Elements() 
          select p; 

輸出

<Eyes>BLUE</Eyes> 

<Eyes>BROWN</Eyes> 

希望我得到了你的問題正確。

注:在你的情況下,你可以使用Descendants

Descendants: yield entire child and sub-tree 
Elements : yield through only through your child