字符串myTagData =“一些有效的xml数据”;

我想编写将XML1和XML2转换为结果XML1和结果XML2的LINQ to XML查询,如果存在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>

最佳答案

这很简单。假设您有一个表示data元素的变量<data>,而myTagData是要添加的元素:

XContainer whereToAdd = data.Element("abc") ?? (XContainer) data;
whereToAdd.Add(myTagData);


这是使用null-coalescing运算符作为在两个选项之间进行切换的简便方法...因为如果请求的元素不存在,Element方法将返回null。如果您对null运算符不满意,则可能会更容易理解:

XElement abc = data.Element("abc");
if (abc != null)
{
    abc.Add(myTagData);
}
else
{
    data.Add(myTagData);
}


我个人还是指简洁的版本:)

08-16 00:49