Información general de LINQ to XML (C#)LINQ to XML Overview (C#)

LINQ to XML proporciona una interfaz de programación XML en memoria que aprovecha .NET Language-Integrated Query (LINQ) Framework.LINQ to XML provides an in-memory XML programming interface that leverages the .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).LINQ to XML uses .NET capabilities and is comparable to an updated, redesigned Document Object Model (DOM) XML programming interface.

XML se ha adoptado ampliamente como un modo de dar formato a datos en diversos contextos.XML has been widely adopted as a way to format data in many contexts. Por ejemplo, puede encontrar XML en la web, en archivos de configuración, en archivos de Microsoft Office Word y en bases de datos.For example, you can find XML on the Web, in configuration files, in Microsoft Office Word files, and in databases.

LINQ to XMLLINQ to XML es un método actualizado y rediseñado para la programación con XML.is an up-to-date, redesigned approach to programming with 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.It provides the in-memory document modification capabilities of the Document Object Model (DOM), and supports LINQ query expressions. Aunque estas expresiones de consulta difieren sintácticamente de XPath, proporcionan una funcionalidad similar.Although these query expressions are syntactically different from XPath, they provide similar functionality.

Desarrolladores de LINQ to XMLLINQ to XML Developers

LINQ to XMLLINQ to XML se dirige a diversos desarrolladores.targets a variety of developers. Para el desarrollador medio que solo desea completar una tarea, LINQ to XMLLINQ to XML simplifica el código XML al proporcionar una experiencia de consulta similar a SQL.For an average developer who just wants to get something done, LINQ to XMLLINQ to XML makes XML easier by providing a query experience that is similar to SQL. Con un poco de estudio, los programadores pueden aprender a escribir consultas sucintas y eficaces en el lenguaje de programación que prefieran.With just a bit of study, programmers can learn to write succinct and powerful queries in their programming language of choice.

Los desarrolladores profesionales pueden usar LINQ to XMLLINQ to XML para aumentar considerablemente su productividad.Professional developers can use LINQ to XMLLINQ to XML to greatly increase their productivity. Con LINQ to XMLLINQ to XML, pueden escribir menos código, que a su vez resulte más expresivo, compacto y eficaz.With LINQ to XMLLINQ to XML, they can write less code that is more expressive, more compact, and more powerful. Pueden usar expresiones de consulta de distintos dominios de datos simultáneamente.They can use query expressions from multiple data domains at the same time.

¿Qué es LINQ to XML?What Is LINQ to XML?

LINQ to XMLLINQ to XML es una interfaz de programación XML en memoria y habilitada para LINQ que permite trabajar con XML desde los lenguajes de programación de .NET Framework.is a LINQ-enabled, in-memory XML programming interface that enables you to work with XML from within the .NET Framework programming languages.

LINQ to XMLLINQ to XML se parece a Document Object Model (DOM) en lo que respecta a la inserción del documento XML en la memoria.is like the Document Object Model (DOM) in that it brings the XML document into memory. Puede consultar y modificar el documento; una vez modificado, puede guardarlo en un archivo o serializarlo y enviarlo a través de Internet.You can query and modify the document, and after you modify it you can save it to a file or serialize it and send it over the Internet. Pero LINQ to XMLLINQ to XML es diferente de DOM: proporciona un nuevo modelo de objetos más ligero, con el que se trabaja más fácilmente y que aprovecha las características de lenguaje de C#.However, LINQ to XMLLINQ to XML differs from DOM: It provides a new object model that is lighter weight and easier to work with, and that takes advantage of language features in C#.

La ventaja más importante de LINQ to XMLLINQ to XML es su integración con Language-Integrated Query (LINQ).The most important advantage of LINQ to XMLLINQ to XML is its integration with Language-Integrated Query (LINQ). Esta integración permite escribir consultas en el documento XML en memoria para recuperar colecciones de elementos y atributos.This integration enables you to write queries on the in-memory XML document to retrieve collections of elements and attributes. La capacidad de consulta de LINQ to XMLLINQ to XML es comparable en cuanto a funcionalidad (aunque no cuanto a sintaxis) a XPath y XQuery.The query capability of LINQ to XMLLINQ to XML is comparable in functionality (although not in syntax) to XPath and XQuery. La integración de LINK en C# proporciona una escritura más rápida, comprobación en tiempo de compilación y compatibilidad mejorada con el depurador.The integration of LINQ in C# provides stronger typing, compile-time checking, and improved debugger support.

Otra ventaja de LINQ to XMLLINQ to XML es la capacidad de usar los resultados de la consulta como parámetros en constructores de objetos XElement y XAttribute, que habilita un método eficaz para crear árboles XML.Another advantage of LINQ to XMLLINQ to XML is the ability to use query results as parameters to XElement and XAttribute object constructors enables a powerful approach to creating XML trees. Este método, denominado construcción funcional, permite que los desarrolladores transformen fácilmente árboles XML de una forma a otra.This approach, called functional construction, enables developers to easily transform XML trees from one shape to another.

Por ejemplo, es posible que tenga un pedido de compra XML típico, como se describe en Archivo XML de ejemplo: Pedido de compra común (LINQ to XML).For example, you might have a typical XML purchase order as described in Sample XML File: Typical Purchase Order (LINQ to XML). Mediante LINQ to XMLLINQ to XML, podría ejecutar la siguiente consulta para obtener el valor del atributo de número de pieza relativo a cada elemento del pedido de compra:By using LINQ to XMLLINQ to XML, you could run the following query to obtain the part number attribute value for every item element in the purchase order:

// 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");

Esto se puede reescribir con formato de sintaxis de método:This can be rewritten in method syntax form:

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 $.As another example, you might want a list, sorted by part number, of the items with a value greater than $100. Para obtener esta información, podría ejecutar la siguiente consulta:To obtain this information, you could run the following query:

// 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;

De nuevo, esto se puede reescribir con formato de sintaxis de método:Again, this can be rewritten in method syntax form:

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 LINK, LINQ to XMLLINQ to XML proporciona una interfaz de programación XML mejorada.In addition to these LINQ capabilities, LINQ to XMLLINQ to XML provides an improved XML programming interface. Con LINQ to XMLLINQ to XML, se puede:Using LINQ to XMLLINQ to XML, you can:

  • Cargar XML a partir de archivos o secuencias.Load XML from files or streams.

  • Serializar XML a archivos o secuencias.Serialize XML to files or streams.

  • Crear árboles XML desde cero mediante la construcción funcional.Create XML from scratch by using functional construction.

  • Realizar consultas de XML con ejes de tipo XPath.Query XML using XPath-like axes.

  • Manipular el árbol XML en memoria con métodos como Add, Remove, ReplaceWith y SetValue.Manipulate the in-memory XML tree by using methods such as Add, Remove, ReplaceWith, and SetValue.

  • Validar árboles XML mediante XSD.Validate XML trees using XSD.

  • Usar una combinación de estas características para transformar las formas de los árboles XML.Use a combination of these features to transform XML trees from one shape into another.

Crear árboles XMLCreating XML Trees

Una de las ventajas más significativas de la programación con LINQ to XMLLINQ to XML es la facilidad con que se pueden crear árboles XML.One of the most significant advantages of programming with LINQ to XMLLINQ to XML is that it is easy to create XML trees. Por ejemplo, para crear un árbol XML pequeño, puede escribir código de la siguiente manera:For example, to create a small XML tree, you can write code as follows:

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")
        )
    )
);

Para obtener más información, consulte Crear árboles XML (C#).For more information, see Creating XML Trees (C#).

Vea tambiénSee also