Condividi tramite


Procedura: applicare un filtro in base a nomi di elemento (LINQ to XML)

Quando si chiama uno dei metodi che restituisce l'oggetto IEnumerable<T> di XElement, è possibile filtrare in base al nome dell'elemento.

Esempio

In questo esempio viene recuperata una raccolta di discendenti filtrata in maniera tale da includere solo i discendenti con il nome specificato.

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

XElement po = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> items =
    from el in po.Descendants("ProductName")
    select el;
foreach(XElement prdName in items)
    Console.WriteLine(prdName.Name + ":" + (string) prdName);
Dim po As XElement = XElement.Load("PurchaseOrder.xml")
Dim items As IEnumerable(Of XElement) = _
    From el In po...<ProductName> _
    Select el
For Each prdName As XElement In items
    Console.WriteLine(prdName.Name.ToString & ":" & prdName.Value)
Next

L'output del codice è il seguente:

ProductName:Lawnmower
ProductName:Baby Monitor

Gli altri metodi che restituiscono l'oggetto IEnumerable<T> delle raccolte XElement sono caratterizzati dallo stesso schema. Le relative firme sono simili a Elements e Descendants. Di seguito è riportato l'elenco completo dei metodi con firme simili:

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

XNamespace aw = "https://www.adventure-works.com";
XElement po = XElement.Load("PurchaseOrderInNamespace.xml");
IEnumerable<XElement> items =
    from el in po.Descendants(aw + "ProductName")
    select el;
foreach (XElement prdName in items)
    Console.WriteLine(prdName.Name + ":" + (string)prdName);
Imports <xmlns:aw="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim po As XElement = XElement.Load("PurchaseOrderInNamespace.xml")
        Dim items As IEnumerable(Of XElement) = _
            From el In po...<aw:ProductName> _
            Select el
        For Each prdName As XElement In items
            Console.WriteLine(prdName.Name.ToString & ":" & prdName.Value)
        Next
    End Sub
End Module

L'output del codice è il seguente:

{https://www.adventure-works.com}ProductName:Lawnmower
{https://www.adventure-works.com}ProductName:Baby Monitor

Vedere anche

Concetti

Assi LINQ to XML