繁体   English   中英

xml c#将带有Linq的元素添加到Xml

[英]xml c# add element with Linq to Xml

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

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>

而且我找不到办法。 请给我一个线索。 谢谢!

您可以包含一个空字符串以强制其添加一个空文本节点:

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()这样,如果没有这样的元素,而不是返回可能出现故障 null

尝试这个:

 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>
));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM