Visão geral do LINQ to XML

O LINQ to XML fornece uma interface de programação XML na memória que aproveita o .NET Language-Integrated Query (LINQ) Framework. O LINQ to XML usa recursos .NET e é comparável a uma interface de programação XML DOM (Document Object Model) atualizada e redesenhada.

O XML tem sido amplamente adotado como uma forma de formatar dados em muitos contextos. Por exemplo, você pode encontrar XML na Web, em arquivos de configuração, em arquivos do Microsoft Office Word e em bancos de dados.

LINQ to XML é uma abordagem atualizada e redesenhada para programação com XML. Ele fornece os recursos de modificação de documentos na memória do DOM (Document Object Model) e suporta expressões de consulta LINQ. Embora essas expressões de consulta sejam sintaticamente diferentes do XPath, elas fornecem funcionalidade semelhante.

Desenvolvedores LINQ to XML

O LINQ to XML destina-se a uma variedade de desenvolvedores. Para um desenvolvedor médio que só quer fazer algo, o LINQ to XML facilita o XML fornecendo uma experiência de consulta semelhante ao SQL. Com apenas um pouco de estudo, os programadores podem aprender a escrever consultas sucintas e poderosas em sua linguagem de programação de escolha.

Desenvolvedores profissionais podem usar LINQ to XML para aumentar consideravelmente sua produtividade. Com o LINQ to XML, eles podem escrever menos código que é mais expressivo, mais compacto e mais poderoso. Eles podem usar expressões de consulta de vários domínios de dados ao mesmo tempo.

LINQ to XML é uma interface de programação XML

LINQ to XML é uma interface de programação XML na memória habilitada para LINQ que permite trabalhar com XML a partir das linguagens de programação .NET.

LINQ to XML é como o DOM (Document Object Model), pois traz o documento XML para a memória. Você pode consultar e modificar o documento e, depois de modificá-lo, pode salvá-lo em um arquivo ou serializá-lo e enviá-lo pela Internet. No entanto, LINQ to XML difere do DOM:

  • Ele fornece um novo modelo de objeto que é mais leve e mais fácil de trabalhar.
  • Ele aproveita os recursos de linguagem em C# e Visual Basic.

A vantagem mais importante do LINQ to XML é a sua integração com o Language-Integrated Query (LINQ). Essa integração permite que você escreva consultas no documento XML na memória para recuperar coleções de elementos e atributos. A capacidade de consulta do LINQ to XML é comparável em funcionalidade (embora não em sintaxe) a XPath e XQuery. A integração do LINQ em C# e Visual Basic fornece digitação mais forte, verificação em tempo de compilação e suporte aprimorado ao depurador.

Outra vantagem do LINQ to XML é a capacidade de usar resultados de consulta como parâmetros para XElement e XAttribute construtores de objeto permite uma abordagem poderosa para criar árvores XML. Essa abordagem, chamada de construção funcional, permite que os desenvolvedores transformem facilmente árvores XML de uma forma para outra.

Por exemplo, você pode ter uma ordem de compra XML típica, conforme descrito em Arquivo XML de exemplo: ordem de compra típica. Usando LINQ to XML, você pode executar a seguinte consulta para obter o valor do atributo part number para cada elemento de item na ordem de compra:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

Em C#, isso pode ser reescrito na forma de sintaxe do método:

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

Como outro exemplo, você pode querer uma lista, ordenada por número de peça, dos itens com um valor maior que $100. Para obter essas informações, você pode executar a seguinte consulta:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
       item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item

Novamente, em C# isso pode ser reescrito na forma de sintaxe do método:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

Além desses recursos do LINQ, o LINQ to XML fornece uma interface de programação XML aprimorada. Usando LINQ to XML, você pode:

  • Carregue XML de arquivos ou fluxos.
  • Serialize XML para arquivos ou fluxos.
  • Crie XML do zero usando a construção funcional.
  • Consultar XML usando eixos semelhantes a XPath.
  • Manipule a árvore XML na memória usando métodos como Add, Remove, ReplaceWithe SetValue.
  • Valide árvores XML usando XSD.
  • Use uma combinação desses recursos para transformar árvores XML de uma forma em outra.

Criar árvores XML

Uma das vantagens mais significativas da programação com LINQ to XML é que é fácil criar árvores XML. Por exemplo, para criar uma pequena árvore XML, você pode escrever código da seguinte maneira:

XElement contacts =
new XElement("Contacts",
    new XElement("Contact",
        new XElement("Name", "Patrick Hines"),
        new XElement("Phone", "206-555-0144",
            new XAttribute("Type", "Home")),
        new XElement("phone", "425-555-0145",
            new XAttribute("Type", "Work")),
        new XElement("Address",
            new XElement("Street1", "123 Main St"),
            new XElement("City", "Mercer Island"),
            new XElement("State", "WA"),
            new XElement("Postal", "68042")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Nota

A versão do Visual Basic do exemplo usa literais XML. Você também pode usar XElement no Visual Basic, como na versão C#.

Para obter mais informações, consulte Árvores XML.

Consulte também