Información general de LINQ to XML

LINQ to XML proporciona una interfaz de programación XML en memoria que aprovecha .NET Language-Integrated Query (LINQ) Framework. LINQ to XML utiliza las características de .NET y es comparable a una actualizada y rediseñada interfaz de programación XML para el Modelo de objetos de documento (DOM).

XML se ha adoptado ampliamente como un modo de dar formato a datos en diversos contextos. Por ejemplo, puede encontrar XML en la web, en archivos de configuración, en archivos de Microsoft Office Word y en bases de datos.

LINQ to XML es un enfoque actualizado y rediseñado para programar con XML. Proporciona las funcionalidades de modificación de documentos en memoria del Modelo de objetos de documento (DOM) y es compatible con expresiones de consulta LINQ. Aunque estas expresiones de consulta difieren sintácticamente de XPath, proporcionan una funcionalidad similar.

desarrolladores de LINQ to XML

LINQ to XML tiene como destino una variedad de desarrolladores. Para un desarrollador promedio que solo quiere hacer algo, LINQ to XML facilita XML proporcionando una experiencia de consulta similar a SQL. Con un poco de estudio, los programadores pueden aprender a escribir consultas sucintas y eficaces en el lenguaje de programación que prefieran.

Professional los desarrolladores pueden usar LINQ to XML para aumentar considerablemente su productividad. Con LINQ to XML, pueden escribir menos código que sea más expresivo, más compacto y más eficaz. Pueden usar expresiones de consulta de distintos dominios de datos simultáneamente.

LINQ to XML es una interfaz de programación XML

LINQ to XML es una interfaz de programación XML en memoria habilitada para LINQ que permite trabajar con XML desde los lenguajes de programación .NET.

LINQ to XML es como el Modelo de objetos de documento (DOM) en el que lleva el documento XML a la memoria. Puede consultar y modificar el documento; una vez modificado, puede guardarlo en un archivo o serializarlo y enviarlo a través de Internet. Sin embargo, LINQ to XML difiere de DOM:

  • Proporciona un nuevo modelo de objetos con el que es más ligero y más fácil trabajar.
  • Aprovecha las características del lenguaje en C# y Visual Basic.

La ventaja más importante de LINQ to XML es su integración con Language-Integrated Query (LINQ). Esta integración permite escribir consultas en el documento XML en memoria para recuperar colecciones de elementos y atributos. La funcionalidad de consulta de LINQ to XML es comparable en funcionalidad (aunque no en sintaxis) con XPath y XQuery. La integración de LINQ en C# y Visual Basic proporciona una mayor escritura, comprobación en tiempo de compilación y compatibilidad mejorada con el depurador.

Otra ventaja de LINQ to XML es la capacidad de usar los resultados de la consulta como parámetros para XElement los constructores de objetos y XAttribute permite un enfoque eficaz para crear árboles XML. Este método, denominado construcción funcional, permite que los desarrolladores transformen fácilmente árboles XML de una forma a otra.

Por ejemplo, podría tener un pedido de compra XML típico, tal como se describe en Archivo XML de ejemplo : Pedido de compra típico. Con LINQ to XML, puede ejecutar la siguiente consulta para obtener el valor del atributo de número de pieza para cada elemento del pedido 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

En C# esto se puede reescribir en forma de sintaxis de método:

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

A modo de ejemplo, imagine que necesita una lista, ordenada por números de pieza, de los elementos con un valor superior a 100 $. Para obtener esta información, podría ejecutar la siguiente 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

De nuevo, en C# se puede volver a escribir en forma de sintaxis de método:

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

Además de estas funcionalidades de LINQ, LINQ to XML proporciona una interfaz de programación XML mejorada. Con LINQ to XML, puede:

  • Cargar XML a partir de archivos o secuencias.
  • Serializar XML a archivos o secuencias.
  • Crear árboles XML desde cero mediante la construcción funcional.
  • Realizar consultas de XML con ejes de tipo XPath.
  • Manipular el árbol XML en memoria con métodos como Add, Remove, ReplaceWith y SetValue.
  • Validar árboles XML mediante XSD.
  • Usar una combinación de estas características para transformar las formas de los árboles XML.

Creación de árboles XML

Una de las ventajas más significativas de la programación con LINQ to XML es que es fácil crear árboles XML. Por ejemplo, para crear un árbol XML pequeño, puede escribir código de la siguiente manera:

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

La versión Visual Basic del ejemplo usa literales XML. También puede usar XElement en Visual Basic, como en la versión de C#.

Para obtener más información, consulte Árboles XML.

Consulte también