另一个简单的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
答
下面的代码(在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
您可以标记自己的答案是正确的:) – 2011-05-09 11:42:21