0

我在文档中有这个 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.

请问有什么想法/建议吗?

4

2 回答 2

0

这应该有效:

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

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

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

于 2013-03-06T13:29:36.430 回答
0

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

您可以将Descendants()链接到First()

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

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

doc.Root.Element("avee").Element("modelic").Add(MI);
于 2013-03-06T13:30:05.013 回答