另一个简单的LINQ to XML查询

问题描述:

这一个是我的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>

找到了!

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

您可以标记自己的答案是正确的:) – 2011-05-09 11:42:21

下面的代码(在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 

我的理解是你想要的。

这是一种奇怪的格式。我不确定你想要迭代的是什么。如果你只是想遍历所有<Eyes>,你可能只是这样做:

Dim query = X...<Eyes> 

否则,如果你只是想每一个<HEAD...>的所有的孩子,你可以这样做:

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

或者使用XPath:

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

,你可以在一个单一的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