c# - 使用 LINQ 在 XML 中的特定位置插入特定的 XElement

标签 c# .net xml linq linq-to-xml

string myTagData = "一些有效的xml数据";

我想编写 LINQ to XML 查询,它可以将 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>

最佳答案

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

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

这是使用空合并运算符作为在两个选项之间切换的简单方法...因为 Element如果请求的元素不存在,方法返回 null。如果您对空合并运算符不满意,您可能会发现它更容易理解:

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

不过我个人引用的是简明版本:)

关于c# - 使用 LINQ 在 XML 中的特定位置插入特定的 XElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642980/

相关文章:

c# - WPF如何在进度条上显示文字

c# - 表示数字的最少位数

c# - 解析 oledb 的参数化字符串

c# - solidcolorbrush和brush的区别

java - 如何获取StAX XMLEvent对象的全文?

android - XSD 字段 "No resource type specified"上的 Eclipse 错误

c# - NHibernate Query to json 结果出乎意料

.net - 在 Windows 7 中使用 .NET Windows 服务显示消息框

c# - 什么时候去静态类?

node.js - 如何使用 Node xml2js 模块转义字符?