我使用Linq to XML将XElement添加到我的文件中。在找到此解决方案Adding XElement to XML file using Linq to XML 而我这样做。
MY XML
<?xml version="1.0" encoding="utf-8"?>
<Kostenstellen>
<Kostenstelle id="111002">
<Kennung>SK_5232</Kennung>
<Kennung>HS_2322</Kennung>
<Kennung>SK_5232</Kennung>
</Kostenstelle>
<Kostenstelle id="111004">
<Kennung>SK_5232</Kennung>
</Kostenstelle>
<Kostenstelle id="123123">
<Kennung>SK_2312</Kennung>
</Kostenstelle>
</Kostenstellen>
C#
string kostenstelle = "1111111";
var costXML = XElement.Load(Settings1.Default.XMLPath);
var newChild = new XElement("Kostenstelle", new XAttribute("id", kostenstelle));
costXML.Add(newChild);
costXML.Save(Settings1.Default.XMLPath);
结果XML应为
<?xml version="1.0" encoding="utf-8"?>
<Kostenstellen>
<Kostenstelle id="111002">
<Kennung>SK_2222</Kennung>
<Kennung>HS_2222</Kennung>
<Kennung>SK_2222</Kennung>
</Kostenstelle>
<Kostenstelle id="111004">
<Kennung>SK_2222</Kennung>
</Kostenstelle>
<Kostenstelle id="123123">
<Kennung>SK_2222</Kennung>
</Kostenstelle>
<Kostenstelle id="111111">
</Kostenstelle>
</Kostenstellen>
但不幸的是,它不会有任何想法吗?
感谢您的回复
凯
更新: 我的问题是添加过程正常。但是当我想保存更改时没有任何反应 它不会抛出异常。
costXML.Save(Settings1.Default.XMLPath);
答案 0 :(得分:0)
您似乎正在尝试添加第二个根元素,因为它是无效的XML,因此不允许这样做。您需要使用以下内容将新元素添加到<Kostenstellen>
元素:
costXML.Descendants("Kostenstellen").First().Add(newChild);
答案 1 :(得分:0)
您确定添加过程正常吗?您的XElement.Load(Settings1.Default.XMLPath);
没有做任何事情。根据您现在使用该代码执行的操作,这意味着您将使用单元素XML覆盖旧的XML文件。
更新:
我尝试使用您的初始XML逐行运行您的代码,并且只替换Settings1 Path变量来引用该XML。这是我的输出:
<?xml version="1.0" encoding="utf-8"?>
<Kostenstellen>
<Kostenstelle id="111002">
<Kennung>SK_5232</Kennung>
<Kennung>HS_2322</Kennung>
<Kennung>SK_5232</Kennung>
</Kostenstelle>
<Kostenstelle id="111004">
<Kennung>SK_5232</Kennung>
</Kostenstelle>
<Kostenstelle id="123123">
<Kennung>SK_2312</Kennung>
</Kostenstelle>
<Kostenstelle id="1111111" />
</Kostenstellen>
从技术上讲它应该有效。我确信它会抛出一个错误 - 没有 - 你正在进行某种类型的尝试捕获并在捕获时忽略它,当应该存在一个保存问题时。我无法想象。