C# 将XElement添加到XML文件

C# 将XElement添加到XML文件,c#,linq,xelement,C#,Linq,Xelement,我正在使用LINQtoXML向文件中添加XElement。我们找到了这个解决方案 我也是这样做的 我的XML <?xml version="1.0" encoding="utf-8"?> <Kostenstellen> <Kostenstelle id="111002"> <Kennung>SK_5232</Kennung> <Kennung>HS_2322</Kennung> <

我正在使用LINQtoXML向文件中添加XElement。我们找到了这个解决方案 我也是这样做的

我的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>
结果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>

似乎您正在尝试添加第二个根元素,这是不允许的,因为它是无效的XML。您需要使用以下方法将新元素添加到元素中:

costXML.Descendants("Kostenstellen").First().Add(newChild);

您确定添加过程正常吗?您的XElement.LoadSettings1.Default.XMLPath;他什么也没做。基于您现在对该代码所做的操作,这意味着您正在用一个元素XML覆盖旧的XML文件

更新:

我尝试使用初始XML逐行运行代码,只替换setings1 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>

因此,从技术上讲,这应该是可行的。我确信它会抛出一个错误——除非——您正在执行某种类型的try-catch,并在catch上忽略它,这时应该会出现保存问题或其他问题。我真的无法想象。

虽然你已经解释了你要做什么以及如何做,但你还没有解释你遇到的问题是什么。例如,运行代码时是否出现异常?或者,输出结果不是您所期望的?请用更多信息更新您的问题。缺少costXML声明在这里似乎至关重要。您可以将其添加到示例代码中吗?如果出现问题,它将抛出异常…您的路径将走向何处?首先感谢您的重播。我忘了把申报单寄出去了。我的路径指向桌面上的XML文件。parh是正确的,读入过程工作正常。嘿,Bossink,首先感谢您的重播。我尝试了您的解决方案,但当我执行时,costXML.genderantskostenstellen包含null。嗨,Tyres,谢谢您的重播。我忘了在postfix中添加costxml的delcaration。Costxml包含整个XML文件。我可以从costxml中选择数据,但当尝试添加XElement时,什么都没有发生。嗨,kai,感谢您的更新。我试着按照我的答案运行你的代码,它对我很有效。谢谢你的反馈,我想我终于找到了错误。我在运行时启动时在全局类中加载该文件。就像公共静态类Global{private static XElement costXML{get{return XElement.loadsetings1.Default.XMLPath;}}}一样,我的假设是,xmlfile在运行时没有更新。。。
costXML.Descendants("Kostenstellen").First().Add(newChild);
<?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>