Procedura: trovare un elemento con un attributo specifico

In questo argomento viene illustrato come trovare un elemento che include un attributo con un valore specifico.

Esempio

Nell'esempio viene illustrato come trovare l'elemento Address contenente un attributo Type con valore "Billing".

Nell'esempio viene utilizzato il seguente documento XML: File XML di esempio: Typical Purchase Order (LINQ to XML)

XElement root = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> address =
    from el in root.Elements("Address")
    where (string)el.Attribute("Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);
Dim root As XElement = XElement.Load("PurchaseOrder.xml")
Dim address As IEnumerable(Of XElement) = _
    From el In root.<Address> _
    Where el.@Type = "Billing" _
    Select el
For Each el As XElement In address
    Console.WriteLine(el)
Next

L'output del codice è il seguente:

<Address Type="Billing">
  <Name>Tai Yee</Name>
  <Street>8 Oak Avenue</Street>
  <City>Old Town</City>
  <State>PA</State>
  <Zip>95819</Zip>
  <Country>USA</Country>
</Address>

Si noti che nella versione Visual Basic di questo esempio vengono utilizzate la proprietà asse figlio XML, la proprietà asse attributo XML e la proprietà valore XML.

Nell'esempio seguente è illustrata la stessa query per XML in uno spazio dei nomi. Per ulteriori informazioni, vedere Utilizzo degli spazi dei nomi XML.

Nell'esempio viene utilizzato il seguente documento XML: File XML di esempio: Typical Purchase Order in a Namespace

XElement root = XElement.Load("PurchaseOrderInNamespace.xml");
XNamespace aw = "https://www.adventure-works.com";
IEnumerable<XElement> address =
    from el in root.Elements(aw + "Address")
    where (string)el.Attribute(aw + "Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);
Imports <xmlns:aw='https://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("PurchaseOrderInNamespace.xml")
        Dim address As IEnumerable(Of XElement) = _
            From el In root.<aw:Address> _
            Where el.@aw:Type = "Billing" _
            Select el
        For Each el As XElement In address
            Console.WriteLine(el)
        Next
    End Sub
End Module

L'output del codice è il seguente:

<aw:Address aw:Type="Billing" xmlns:aw="https://www.adventure-works.com">
  <aw:Name>Tai Yee</aw:Name>
  <aw:Street>8 Oak Avenue</aw:Street>
  <aw:City>Old Town</aw:City>
  <aw:State>PA</aw:State>
  <aw:Zip>95819</aw:Zip>
  <aw:Country>USA</aw:Country>
</aw:Address>

Vedere anche

Riferimenti

Attribute

Elements

Concetti

Query di base (LINQ to XML)

Cenni preliminari sugli operatori di query standard

Operazioni di proiezione