如何使用 Descendants 方法查找单个子代 (LINQ to XML)
可以使用 Descendants 轴方法查找单个唯一命名的后代元素。 如果要查找具有特定名称的特定后代时,这种方法特别有用,并且可能比浏览 XML 树更快、更容易使用。
示例:使用 XContainer.Descendants 查找单个唯一命名的后代元素
本示例使用 First 标准查询运算符。
XElement root = XElement.Parse(@"<Root>
<Child1>
<GrandChild1>GC1 Value</GrandChild1>
</Child1>
<Child2>
<GrandChild2>GC2 Value</GrandChild2>
</Child2>
<Child3>
<GrandChild3>GC3 Value</GrandChild3>
</Child3>
<Child4>
<GrandChild4>GC4 Value</GrandChild4>
</Child4>
</Root>");
string grandChild3 = (string)
(from el in root.Descendants("GrandChild3")
select el).First();
Console.WriteLine(grandChild3);
Dim root As XElement = _
<Root>
<Child1>
<GrandChild1>GC1 Value</GrandChild1>
</Child1>
<Child2>
<GrandChild2>GC2 Value</GrandChild2>
</Child2>
<Child3>
<GrandChild3>GC3 Value</GrandChild3>
</Child3>
<Child4>
<GrandChild4>GC4 Value</GrandChild4>
</Child4>
</Root>
Dim grandChild3 As String = _
(From el In root...<GrandChild3> _
Select el).First()
Console.WriteLine(grandChild3)
该示例产生下面的输出:
GC3 Value
示例:当 XML 位于命名空间中时查找
以下示例与前一个示例的功能相同,但针对的是位于命名空间中的 XML。 有关详细信息,请参阅命名空间概述。
XElement root = XElement.Parse(@"<aw:Root xmlns:aw='http://www.adventure-works.com'>
<aw:Child1>
<aw:GrandChild1>GC1 Value</aw:GrandChild1>
</aw:Child1>
<aw:Child2>
<aw:GrandChild2>GC2 Value</aw:GrandChild2>
</aw:Child2>
<aw:Child3>
<aw:GrandChild3>GC3 Value</aw:GrandChild3>
</aw:Child3>
<aw:Child4>
<aw:GrandChild4>GC4 Value</aw:GrandChild4>
</aw:Child4>
</aw:Root>");
XNamespace aw = "http://www.adventure-works.com";
string grandChild3 = (string)
(from el in root.Descendants(aw + "GrandChild3")
select el).First();
Console.WriteLine(grandChild3);
Imports <xmlns:aw='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<aw:Root>
<aw:Child1>
<aw:GrandChild1>GC1 Value</aw:GrandChild1>
</aw:Child1>
<aw:Child2>
<aw:GrandChild2>GC2 Value</aw:GrandChild2>
</aw:Child2>
<aw:Child3>
<aw:GrandChild3>GC3 Value</aw:GrandChild3>
</aw:Child3>
<aw:Child4>
<aw:GrandChild4>GC4 Value</aw:GrandChild4>
</aw:Child4>
</aw:Root>
Dim grandChild3 As String = _
(From el In root...<aw:GrandChild3> _
Select el).First()
Console.WriteLine(grandChild3)
End Sub
End Module
该示例产生下面的输出:
GC3 Value