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