Manter pares nome-valor (LINQ to XML)

Muitos aplicativos devem manter informações que são mais bem armazenadas como pares de nome-valor. Essas informações podem ser informações de configuração ou configurações globais. O LINQ to XML contém métodos que facilitam a manutenção de um conjunto de pares nome-valor. É possível manter informações como atributos ou como um conjunto de elementos filho.

Uma das diferenças entre manter as informações como atributos ou como elementos filho é que os atributos possuem a restrição de que pode existir apenas um atributo com um nome específico para um elemento. Essa limitação não se aplica aos elementos filho.

SetAttributeValue e SetElementValue

Os dois métodos que facilitam o trabalho de manter pares de valor/nome são SetAttributeValue e SetElementValue. Esses dois métodos possuem semântica semelhante.

SetAttributeValue pode adicionar, modificar e remover atributos de um elemento.

  • Ao chamar SetAttributeValue com o nome de um atributo inexistente, o método cria um novo atributo e o adiciona ao elemento especificado.
  • Ao designar SetAttributeValue com o nome de um atributo existente e algum conteúdo especificado, o conteúdo do atributo é substituído pelo conteúdo especificado.
  • Ao chamar SetAttributeValue com o nome de um atributo existente e especificar null em relação ao conteúdo, o atributo é removido de seu pai.

SetElementValue pode adicionar, modificar e remover elementos filho de um elemento.

  • Ao chamar SetElementValue com o nome de um elemento filho que não existe, o método cria um novo elemento e o adiciona ao elemento especificado.
  • Ao designar SetElementValue com o nome de um elemento existente e algum conteúdo especificado, o conteúdo do elemento é substituído pelo conteúdo especificado.
  • Ao chamar SetElementValue com o nome de um elemento existente e especificar null em relação ao conteúdo, o elemento é removido de seu pai.

Exemplo: usar SetAttributeValue para criar e manter uma lista de pares nome-valor

O exemplo a seguir cria um elemento sem atributos. Usa o método SetAttributeValue para criar e manter uma lista de pares de nome-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)

Esse exemplo gera a saída a seguir:

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

Exemplo: usar SetElementValue para criar e manter uma lista de pares nome-valor

O exemplo a seguir cria um elemento sem elementos filho. Usa o método SetElementValue para criar e manter uma lista de pares de nome-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)

Esse exemplo gera a saída a seguir:

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

Confira também