Обслуживание пар "имя-значение" (LINQ to XML)
Многие приложения должны поддерживать информацию, которая лучше всего хранится в виде пар "имя-значение". Эти данные могут представлять сведения о конфигурации или глобальные параметры. LINQ to XML содержит методы, которые упрощают обслуживание набора пар "имя-значение". Можно либо оставить информацию в виде атрибутов, либо в виде набора дочерних элементов.
Одно из отличий между хранением информации в виде атрибутов и в виде дочерних элементов состоит в том, что атрибуты имеют ограничение в том, что для элемента может быть только один атрибут с данным именем. Это ограничение не применяется к дочерним элементам.
Методы SetAttributeValue и SetElementValue
Два метода, которые упрощают сохранение пар "имя-значение" и SetAttributeValueSetElementValue. Эти два метода имеют похожую семантику.
SetAttributeValue может добавлять, изменять и удалять атрибуты элемента.
- При вызове SetAttributeValue с именем атрибута, который не существует, метод создает новый атрибут и добавляет его в указанный элемент.
- При вызове метода SetAttributeValue с существующим именем атрибута и с указанным содержимым содержимое данного атрибута замещается указанным содержимым.
- При вызове SetAttributeValue с именем существующего атрибута и указании
null
содержимого атрибут удаляется из родительского элемента.
SetElementValue может добавлять, изменять и удалять дочерние элементы элемента.
- При вызове SetElementValue имени дочернего элемента, который не существует, метод создает новый элемент и добавляет его в указанный элемент.
- При вызове метода SetElementValue с существующим именем элемента и с указанным содержимым содержимое данного элемента замещается указанным содержимым.
- При вызове SetElementValue с именем существующего элемента и указании
null
содержимого элемент удаляется из родительского элемента.
Пример. Создание SetAttributeValue
и обслуживание списка пар "имя-значение"
Следующий пример показывает, как создать элемент без атрибутов. Затем он использует SetAttributeValue метод для создания и поддержания списка пар "имя-значение".
// 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)
В примере получается следующий вывод.
<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" />
Пример. Создание SetElementValue
и обслуживание списка пар "имя-значение"
Следующий пример показывает, как создать элемент без дочерних элементов. Затем он использует SetElementValue метод для создания и поддержания списка пар "имя-значение".
// 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)
В примере получается следующий вывод.
<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>