Вставка определенного XElement в определенную позицию в XML с использованием LINQ - PullRequest
2 голосов
/ 27 декабря 2011

строка 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 Ответ

3 голосов
/ 27 декабря 2011

Это просто. Предполагая, что у вас есть переменная 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);
}

Лично я имею ввиду краткую версию:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...