Вставка определенного XElement в определенную позицию в XML с использованием LINQ
string myTagData = "некоторые допустимые данные xml";
Я хочу написать LINQ to XML Query, который может конвертировать XML1 и XML2 в результирующий XML1 и результирующий XML2, если тег abc существует, тогда вставьте содержимое myTagData как последнего дочернего элемента тега abc, в противном случае, если тег abc не существует, добавьте содержимое myTagData как последнее дитя корневого элемента.
XML1
<data>
<abc>
<tag1></tag1>
<tag2></tag2>
</abc>
</data>
xml2
<data>
<data>
<cde>
</cde>
<xyz>
</xyz>
</data>
Результирующий XML 1
<data>
<abc>
<tag1></tag1>
<tag2></tag2>
<myTag></myTag>
</abc>
<bcd>
</bcd>
</data>
Результирующий XML2
<data>
<cde>
</cde>
<xyz>
</xyz>
<myTag></myTag>
</data>
1 ответ
Это легко. Предполагая, что у вас есть переменная data
представляя <data>
элемент и myTagData
это элемент, который вы хотите добавить:
XContainer whereToAdd = data.Element("abc") ?? (XContainer) data;
whereToAdd.Add(myTagData);
Это использует нуль-объединяющий оператор как простой способ переключения между двумя вариантами... потому что Element
Метод возвращает ноль, если запрошенный элемент не существует. Если вас не устраивает оператор с нулевым слиянием, вам может показаться, что это проще понять:
XElement abc = data.Element("abc");
if (abc != null)
{
abc.Add(myTagData);
}
else
{
data.Add(myTagData);
}
Лично я ссылаюсь на краткую версию, хотя:)