Compartir a través de


Información general sobre 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 usa funcionalidades de .NET y es comparable a una interfaz de programación XML del Modelo de objetos de documento (DOM) actualizada y rediseñada.

XML se ha adoptado ampliamente como una manera de dar formato a los datos en muchos 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 la programación con XML. Proporciona las funcionalidades de modificación de documentos en memoria del Modelo de objetos de documento (DOM) y admite expresiones de consulta LINQ. Aunque estas expresiones de consulta son sintácticasmente diferentes 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 al proporcionar una experiencia de consulta similar a SQL. Con un poco de estudio, los programadores pueden aprender a escribir consultas concisas y eficaces en su lenguaje de programación de elección.

Los desarrolladores profesionales 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 varios dominios de datos al mismo tiempo.

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 de .NET.

LINQ to XML es como el Modelo de objetos de documento (DOM) en el que aporta el documento XML a la memoria. Puede consultar y modificar el documento y, después de modificarlo, 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 objeto que es más ligero y más fácil de usar.
  • 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) a XPath y XQuery. La integración de LINQ en C# y Visual Basic proporciona tipos más fuertes, 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 enfoque, denominado construcción funcional, permite a los desarrolladores transformar fácilmente árboles XML de una forma a otra.

Por ejemplo, puede tener un pedido de compra XML típico, tal como se describe en Archivo XML de ejemplo: Pedido de compra típico. Mediante 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# se puede reescribir en forma de sintaxis de método:

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

Como otro ejemplo, puede que desee una lista, ordenada por número de parte, de los elementos con un valor mayor que 100 USD. Para obtener esta información, puede ejecutar la consulta siguiente:

// 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 reescribir en el formato de sintaxis del 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 hacer lo siguiente:

  • Cargar XML desde archivos o secuencias.
  • Serialice XML en archivos o secuencias.
  • Cree XML desde cero mediante la construcción funcional.
  • Consultar XML mediante ejes de tipo XPath.
  • Manipule el árbol XML en memoria mediante métodos como Add, Remove, ReplaceWithy SetValue.
  • Valide árboles XML mediante XSD.
  • Use una combinación de estas características para transformar árboles XML de una forma a otra.

Crear árboles XML

Una de las ventajas más importantes 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 de 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, vea Árboles XML.

Consulte también