Procédure : rechercher les descendants avec un nom d'élément spécifique
Parfois, vous souhaitez rechercher tous les descendants avec un nom particulier. Vous pourriez écrire du code pour itérer au sein de tous les descendants, mais il est plus facile d'utiliser l'axe Descendants.
Exemple
L'exemple suivant montre comment rechercher des descendants en fonction du nom d'élément.
XElement root = XElement.Parse(@"<root>
<para>
<r>
<t>Some text </t>
</r>
<n>
<r>
<t>that is broken up into </t>
</r>
</n>
<n>
<r>
<t>multiple segments.</t>
</r>
</n>
</para>
</root>");
IEnumerable<string> textSegs =
from seg in root.Descendants("t")
select (string)seg;
string str = textSegs.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(i),
sp => sp.ToString()
);
Console.WriteLine(str);
Dim root As XElement = _
<root>
<para>
<r>
<t>Some text </t>
</r>
<n>
<r>
<t>that is broken up into </t>
</r>
</n>
<n>
<r>
<t>multiple segments.</t>
</r>
</n>
</para>
</root>
Dim textSegs As IEnumerable(Of String) = _
From seg In root...<t> _
Select seg.Value
Dim str As String = textSegs.Aggregate( _
New StringBuilder, _
Function(sb, i) sb.Append(i), _
Function(sb) sb.ToString)
Console.WriteLine(str)
Ce code génère la sortie suivante :
Some text that is broken up into multiple segments.
L'exemple suivant illustre la même requête pour du code XML qui est dans un espace de noms. Pour plus d'informations, consultez Utilisation des espaces de noms XML.
XElement root = XElement.Parse(@"<root xmlns='http://www.adatum.com'>
<para>
<r>
<t>Some text </t>
</r>
<n>
<r>
<t>that is broken up into </t>
</r>
</n>
<n>
<r>
<t>multiple segments.</t>
</r>
</n>
</para>
</root>");
XNamespace ad = "http://www.adatum.com";
IEnumerable<string> textSegs =
from seg in root.Descendants(ad + "t")
select (string)seg;
string str = textSegs.Aggregate(new StringBuilder(),
(sb, i) => sb.Append(i),
sp => sp.ToString()
);
Console.WriteLine(str);
Imports <xmlns='http://www.adatum.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<root>
<para>
<r>
<t>Some text </t>
</r>
<n>
<r>
<t>that is broken up into </t>
</r>
</n>
<n>
<r>
<t>multiple segments.</t>
</r>
</n>
</para>
</root>
Dim textSegs As IEnumerable(Of String) = _
From seg In root...<t> _
Select seg.Value
Dim str As String = textSegs.Aggregate( _
New StringBuilder, _
Function(sb, i) sb.Append(i), _
Function(sb) sb.ToString)
Console.WriteLine(str)
End Sub
End Module
Ce code génère la sortie suivante :
Some text that is broken up into multiple segments.