另一个简单的LINQ to XML查询

时间:2011-05-03 07:56:17

标签: .net vb.net linq linq-to-xml

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

上面应该在第一次迭代时返回 <Eyes>BLUE</Eyes>为ElementNodeType,第二个<Eyes>BROWN</Eyes>

4 个答案:

答案 0 :(得分: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

我理解的是你想要的。

答案 1 :(得分:0)

发现它!

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

答案 2 :(得分:0)

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

Dim query = X...<Eyes>

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

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

或者使用XPath:

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

答案 3 :(得分: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