Como localizar um único descendente usando o método de descendentes
Você pode usar o método de eixo Descendants para rapidamente escrever código para localizar um único elemento nomeado exclusivamente. Essa técnica é especialmente útil quando você quer localizar um descendente específico com um nome específico. Você pode escrever o código para navegar para o elemento desejado, mas geralmente é mais rápido e fácil escrever código usando o eixo Descendants.
Exemplo
Este exemplo usa o operador padrão de consulta 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)
Esse código gera a seguinte saída:
GC3 Value
O exemplo a seguir mostra a mesma consulta para XML que está em um namespace. Para obter mais informações, consulte Trabalhando com namespaces XML.
XElement root = XElement.Parse(@"<aw:Root xmlns:aw='https://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 = "https://www.adventure-works.com";
string grandChild3 = (string)
(from el in root.Descendants(aw + "GrandChild3")
select el).First();
Console.WriteLine(grandChild3);
Imports <xmlns:aw='https://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
Esse código gera a seguinte saída:
GC3 Value