Вставка определенного 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);
}

Лично я ссылаюсь на краткую версию, хотя:)

Другие вопросы по тегам