【问题标题】:xml c# add element with Linq to Xmlxml c# 用 Linq 添加元素到 XML
【发布时间】:2023-03-24 23:38:01
【问题描述】:

我需要一些帮助来添加一个元素,现在我正在这样做:

XDocument xDoc = XDocument.Load(testFile);
xDoc.Descendants("SQUIBLIST")
    .FirstOrDefault()
    .Add(new XElement("Sensor", 
            new XAttribute("ID", id + 1), 
            new XAttribute("Name", "Squib" + (id + 1).ToString()), 
            new XAttribute("Used", "True")));
xDoc.Save(testFile);

我得到(例如):

   <Sensor ID="26" Name="Squib26" Used="True" />

我想要的是这个:

   <Sensor ID="26" Name="Squib26" Used="True"></Sensor>

我找不到办法。 皮斯给我一个线索。谢谢!

【问题讨论】:

标签: c# xml linq


【解决方案1】:

你可以包含一个空字符串来强制它添加一个空文本节点:

new XElement("Sensor", 
    new XAttribute("ID", id + 1), 
    new XAttribute("Name", "Squib" + (id + 1).ToString()),
    new XAttribute("Used", "True"),
    "")

但是,您应该考虑为什么您真正需要它。通常,读取 XML 的应用程序根本不应该关心差异。

还要注意,如果没有任何 SQUIBLIST 元素,调用 FirstOrDefault().Add(...) 会失败并返回 NullReferenceException至少使用First()会更清楚,这样如果没有这样的元素,that可能会失败,而不是返回null

【讨论】:

  • 非常感谢 Jon,效果很好,我还按照您的建议重新格式化了我的代码。
【解决方案2】:

试试这个:

 xDoc.Descendants("SQUIBLIST")
      .FirstOrDefault()
      .Add(
             new XElement("Sensor", 
             new XAttribute("ID", id + 1), 
             new XAttribute("Name", "Squib" + (id + 1).ToString()), 
             new XAttribute("Used", "True")
             ,"" //<-- this will represent the value of <Sensor>
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多