另一个简单的LINQ到XML查询



这是我的XML

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

直到现在,我设法得到了头部的零件。现在,我如何在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>

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

我知道这就是你想要的。

找到了!

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

这是一种奇怪的格式。我不确定你到底想迭代什么。如果你只想迭代所有的<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

相关内容

  • 没有找到相关文章

最新更新