Leer en inglés

Compartir a través de


Creación de una jerarquía mediante la agrupación (LINQ to XML)

Los datos se pueden agrupar en función de los valores relacionados de distintos elementos y, después, reordenarlos para colocar los elementos relacionados en un elemento que refleje la relación. En este artículo se proporciona un ejemplo para C# y Visual Basic.

Ejemplo: Creación de un nuevo documento XML en el que los datos se agrupan por categoría

En el siguiente ejemplo se muestra cómo agrupar datos y después generar XML basado en la agrupación. En él se agrupan primero los datos por igualdad de valor de los elementos <Category> y, a continuación, se genera un nuevo archivo XML en el que la jerarquía XML refleja la agrupación.

En este ejemplo se usa el documento XML Ejemplo de archivo XML: Datos numéricos.

C#
XElement doc = XElement.Load("Data.xml");
var newData =
    new XElement("Root",
        from data in doc.Elements("Data")
        group data by (string)data.Element("Category") into groupedData
        select new XElement("Group",
            new XAttribute("ID", groupedData.Key),
            from g in groupedData
            select new XElement("Data",
                g.Element("Quantity"),
                g.Element("Price")
            )
        )
    );
Console.WriteLine(newData);

Este ejemplo produce el siguiente resultado:

XML
<Root>
  <Group ID="A">
    <Data>
      <Quantity>3</Quantity>
      <Price>24.50</Price>
    </Data>
    <Data>
      <Quantity>5</Quantity>
      <Price>4.95</Price>
    </Data>
    <Data>
      <Quantity>3</Quantity>
      <Price>66.00</Price>
    </Data>
    <Data>
      <Quantity>15</Quantity>
      <Price>29.00</Price>
    </Data>
  </Group>
  <Group ID="B">
    <Data>
      <Quantity>1</Quantity>
      <Price>89.99</Price>
    </Data>
    <Data>
      <Quantity>10</Quantity>
      <Price>.99</Price>
    </Data>
    <Data>
      <Quantity>8</Quantity>
      <Price>6.99</Price>
    </Data>
  </Group>
</Root>