在现有文档中填充XML元素

本文关键字:填充 XML 元素 文档 | 更新日期: 2023-09-27 18:02:37

我在文档中有这个XML元素字符串

<dmc><avee><modelic></modelic><sdc></sdc><chapnum></chapnum><section></section>
<subsect></subsect><subject></subject><discode></discode><discodev></discodev>
<incode></incode><incodev></incodev><itemloc></itemloc></avee></dmc>

我现在需要做的是使用Linq用用户输入的变量填充这些元素。我现在有:

XDocument doc = XDocument.Load(sgmlReader);
doc.Element("modelic").Add(MI);
doc.Element("sdc").Add(sd);
doc.Element("chapnum").Add(sys);
doc.Element("section").Add(subsys);
doc.Element("subsect").Add(subsubsys);
doc.Element("subject").Add(unit);
doc.Element("discode").Add(dc);
doc.Element("discodev").Add(dcv);
doc.Element("incode").Add(infcode);
doc.Element("incodev").Add(infCV);
doc.Element("itemloc").Add(loc);

(是的,我正在使用sgmlReader,但这在我的程序中在其他领域工作得很好)我显然错过了一些基本的东西,因为它给了我一个NullReferenceException was unhandled - Object reference not set to an instance of an object

有什么想法/建议吗?

在现有文档中填充XML元素

Element()方法只匹配容器的直接子元素。

你可以把Descendants()串成First():

doc.Descendants("modelic").First().Add(MI);

或者导航到要修改的元素的直接父元素:

doc.Root.Element("avee").Element("modelic").Add(MI);

应该可以:

        var avee = dmc.Root.Element("avee");
        avee.Element("modelic").Value = MI;
        avee.Element("sdc").Value = sd;

只需为每个剩余元素(chapnum, section…)重复最后一行。

问题是,首先您必须检索根元素(dmc),然后是avee,然后您可以为avee的子元素设置值。