Partager via


Procédure : rechercher des éléments avec un attribut spécifique (XPath-LINQ to XML)

Parfois, vous souhaitez rechercher tous les éléments qui ont un attribut spécifique.Vous ne vous souciez pas du contenu de l'attribut.Au lieu de cela, vous souhaitez sélectionner les éléments en fonction de l'existence de l'attribut.

L'expression XPath est la suivante :

./*[@Select]

Exemple

Le code suivant sélectionne simplement les éléments qui ont l'attribut Select.

XElement doc = XElement.Parse(
@"<Root>
    <Child1>1</Child1>
    <Child2 Select='true'>2</Child2>
    <Child3>3</Child3>
    <Child4 Select='true'>4</Child4>
    <Child5>5</Child5>
</Root>");

// LINQ to XML query
IEnumerable<XElement> list1 =
    from el in doc.Elements()
    where el.Attribute("Select") != null
    select el;

// XPath expression
IEnumerable<XElement> list2 =
    ((IEnumerable)doc.XPathEvaluate("./*[@Select]")).Cast<XElement>();

if (list1.Count() == list2.Count() &&
        list1.Intersect(list2).Count() == list1.Count())
    Console.WriteLine("Results are identical");
else
    Console.WriteLine("Results differ");
foreach (XElement el in list1)
    Console.WriteLine(el);
Dim doc As XElement = _ 
    <Root>
        <Child1>1</Child1>
        <Child2 Select='true'>2</Child2>
        <Child3>3</Child3>
        <Child4 Select='true'>4</Child4>
        <Child5>5</Child5>
    </Root>

' LINQ to XML query
Dim list1 As IEnumerable(Of XElement) = _
    From el In doc.Elements() _
    Where el.@Select <> Nothing _
    Select el

' XPath expression
Dim list2 As IEnumerable(Of XElement) = DirectCast(doc.XPathEvaluate _
    ("./*[@Select]"), IEnumerable).Cast(Of XElement)()

If list1.Count() = list2.Count() And _
    list1.Intersect(list2).Count() = list1.Count() Then
    Console.WriteLine("Results are identical")
Else
    Console.WriteLine("Results differ")
End If

For Each el As XElement In list1
    Console.WriteLine(el)
Next

Cet exemple génère la sortie suivante :

Results are identical
<Child2 Select="true">2</Child2>
<Child4 Select="true">4</Child4>

Voir aussi

Concepts

LINQ to XML pour les utilisateurs XPath