Condividi tramite


Come trovare un elemento con un attributo specifico (LINQ to XML)

Questo articolo fornisce esempi di come trovare un elemento il cui attributo ha un valore specifico.

Esempio: trovare un elemento il cui attributo ha un valore specifico

L'esempio seguente mostra come trovare l'elemento Address con un attributo Type con il valore "Billing". Nell'esempio viene usato il documento XML File XML di esempio: Tipico ordine di acquisto.

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

Nell'esempio viene prodotto l'output 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>

Esempio: trovare un elemento in XML che si trova in uno spazio dei nomi

Nell'esempio seguente viene illustrata la stessa query, ma per XML presente in uno spazio dei nomi. Viene usato il documento XML File XML di esempio: Tipico ordine di acquisto in uno spazio dei nomi.

Per altre informazioni sugli spazi dei nomi, vedere Panoramica degli spazi dei nomi.

XElement root = XElement.Load("PurchaseOrderInNamespace.xml");
XNamespace aw = "http://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='http://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

Questo esempio produce l'output seguente:

<aw:Address aw:Type="Billing" xmlns:aw="http://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>

Vedi anche