Mantenimiento de pares nombre-valor (LINQ to XML)

Son muchas las aplicaciones que necesitan mantener información que se almacena mejor en forma de pares nombre-valor. Esta información podría contener datos sobre configuración o valores globales. LINQ to XML incluye métodos que facilitan el mantenimiento de un conjunto de pares nombre-valor. Puede almacenar la información como atributos o como un conjunto de elementos secundarios.

Una diferencia existente entre almacenar la información como atributos o como elementos secundarios es que los atributos tienen, como restricción, que solo puede existir un atributo con un nombre en particular para un elemento. Esto no se aplica a los elementos secundarios.

SetAttributeValue y SetElementValue

Los dos métodos que facilitan el mantenimiento de pares nombre-valor son SetAttributeValue y SetElementValue. La semántica de ambos métodos es muy similar.

SetAttributeValue permite agregar, modificar y eliminar atributos de un elemento.

  • Si llama al método SetAttributeValue con el nombre de un atributo que no existe, éste creará un nuevo atributo y lo agregará al elemento especificado.
  • Si llama al método SetAttributeValue con el nombre de un atributo ya existente y con un contenido en particular, se sobrescribirán los contenidos del atributo con el contenido especificado.
  • Si llama al método SetAttributeValue con el nombre de un atributo ya existente y especifica null para el contenido, se eliminará el atributo de su elemento primario.

SetElementValue permite agregar, modificar y eliminar elementos secundarios de un elemento.

  • Si llama al método SetElementValue con el nombre de un elemento secundario que no existe, éste creará un nuevo elemento y lo agregará al elemento especificado.
  • Si llama al método SetElementValue con el nombre de un elemento ya existente y con un contenido en particular, se sobrescribirán los contenidos del elemento con el contenido especificado.
  • Si llama al método SetElementValue con el nombre de un elemento ya existente y especifica null para el contenido, se eliminará el elemento de su elemento primario.

Ejemplo: Usar SetAttributeValue para crear y mantener una lista de pares nombre-valor

El siguiente ejemplo crea un elemento que no tiene atributos. A continuación, utiliza el método SetAttributeValue para crear y mantener una lista de pares nombre-valor.

// Create an element with no content.
XElement root = new XElement("Root");

// Add a number of name-value pairs as attributes.
root.SetAttributeValue("Top", 22);
root.SetAttributeValue("Left", 20);
root.SetAttributeValue("Bottom", 122);
root.SetAttributeValue("Right", 300);
root.SetAttributeValue("DefaultColor", "Color.Red");
Console.WriteLine(root);

// Replace the value of Top.
root.SetAttributeValue("Top", 10);
Console.WriteLine(root);

// Remove DefaultColor.
root.SetAttributeValue("DefaultColor", null);
Console.WriteLine(root);
' Create an element with no content.
Dim root As XElement = <Root/>

' Add a number of name-value pairs as attributes.
root.SetAttributeValue("Top", 22)
root.SetAttributeValue("Left", 20)
root.SetAttributeValue("Bottom", 122)
root.SetAttributeValue("Right", 300)
root.SetAttributeValue("DefaultColor", "Color.Red")
Console.WriteLine(root)

' Replace the value of Top.
root.SetAttributeValue("Top", 10)
Console.WriteLine(root)

' Remove DefaultColor.
root.SetAttributeValue("DefaultColor", Nothing)
Console.WriteLine(root)

Este ejemplo produce el siguiente resultado:

<Root Top="22" Left="20" Bottom="122" Right="300" DefaultColor="Color.Red" />
<Root Top="10" Left="20" Bottom="122" Right="300" DefaultColor="Color.Red" />
<Root Top="10" Left="20" Bottom="122" Right="300" />

Ejemplo: Usar SetElementValue para crear y mantener una lista de pares nombre-valor

El siguiente ejemplo crea un elemento que no tiene elementos secundarios. A continuación, utiliza el método SetElementValue para crear y mantener una lista de pares nombre-valor.

// Create an element with no content.
XElement root = new XElement("Root");

// Add a number of name-value pairs as elements.
root.SetElementValue("Top", 22);
root.SetElementValue("Left", 20);
root.SetElementValue("Bottom", 122);
root.SetElementValue("Right", 300);
root.SetElementValue("DefaultColor", "Color.Red");
Console.WriteLine(root);
Console.WriteLine("----");

// Replace the value of Top.
root.SetElementValue("Top", 10);
Console.WriteLine(root);
Console.WriteLine("----");

// Remove DefaultColor.
root.SetElementValue("DefaultColor", null);
Console.WriteLine(root);
' Create an element with no content.
Dim root As XElement = <Root/>

' Add a number of name-value pairs as elements.
root.SetElementValue("Top", 22)
root.SetElementValue("Left", 20)
root.SetElementValue("Bottom", 122)
root.SetElementValue("Right", 300)
root.SetElementValue("DefaultColor", "Color.Red")
Console.WriteLine(root)
Console.WriteLine("----")

' Replace the value of Top.
root.SetElementValue("Top", 10)
Console.WriteLine(root)
Console.WriteLine("----")

' Remove DefaultColor.
root.SetElementValue("DefaultColor", Nothing)
Console.WriteLine(root)

Este ejemplo produce el siguiente resultado:

<Root>
  <Top>22</Top>
  <Left>20</Left>
  <Bottom>122</Bottom>
  <Right>300</Right>
  <DefaultColor>Color.Red</DefaultColor>
</Root>
----
<Root>
  <Top>10</Top>
  <Left>20</Left>
  <Bottom>122</Bottom>
  <Right>300</Right>
  <DefaultColor>Color.Red</DefaultColor>
</Root>
----
<Root>
  <Top>10</Top>
  <Left>20</Left>
  <Bottom>122</Bottom>
  <Right>300</Right>
</Root>

Consulte también