【问题标题】:Adding XElement in to Existing XML File将 XElement 添加到现有 XML 文件中
【发布时间】:2014-12-04 03:01:03
【问题描述】:

我已经做了很多研究,我看到的所有地方都说这应该有效。每次我运行我的程序时,它都会出现以下错误:当程序到达 xdoc.Root.Element 时,“对象引用未设置为对象的实例”.....

这个sn-p在主程序中。

    private void btn_save_Click(object sender, EventArgs e)
    {
        Certification cert = new Certification();
        cert.CreateCertification(txt_certlevel.Text, txt_certnum.Text, txt_certagency.Text, dtp_cert.Value);
        xmlfunction.Add(cert);
    }

而且这个 sn-p 在一个与主程序文件分开的 Class 文件中。

    public void Add(Certification certification)
    {

            XDocument xdoc = XDocument.Load(pathString);

            xdoc.Root.Element("Digital_Scuba_Log").Element("Diver").Element("Certifications").Add(new XElement("Certification_Card",
                new XElement("Level", certification.Level),
                new XElement("Agency", certification.Agency),
                new XElement("Number", certification.Number),
                new XElement("Date", certification.Date.ToString())
                ));
            xdoc.Save(pathString);
    }

任何帮助都会很棒!

【问题讨论】:

  • 调试是你的朋友。检查 null 值的来源。
  • 它似乎在 xdoc 文档类型中。我该如何解决这个问题?

标签: c# xml visual-studio linq-to-xml


【解决方案1】:

我的猜测是“Digital_Scuba_Log”是 XML 的根节点。在这种情况下,当您使用 xdoc.Root 时,您已经在遍历该节点。以下是基于您的 XML 的 2 种方法。

“Digital_Scuba_Log”作为您的根节点:

XDocument xDoc2 = XDocument.Parse("<Digital_Scuba_Log><Diver><Certifications></Certifications></Diver></Digital_Scuba_Log>");

xDoc2.Element("Digital_Scuba_Log")
  .Element("Diver")
  .Element("Certifications")
  .Add(new XElement("Certification_Card",
    new XElement("Level", certification.Level),
    new XElement("Agency", certification.Agency),
    new XElement("Number", certification.Number),
    new XElement("Date", certification.Date.ToString())
));

在你的 xml 上有一个根节点:

XDocument xDoc1 = XDocument.Parse("<root><Digital_Scuba_Log><Diver><Certifications></Certifications></Diver></Digital_Scuba_Log></root>");

xDoc1.Root.Element("Digital_Scuba_Log")
  .Element("Diver")
  .Element("Certifications")
  .Add(new XElement("Certification_Card",
    new XElement("Level", certification.Level),
    new XElement("Agency", certification.Agency),
    new XElement("Number", certification.Number),
    new XElement("Date", certification.Date.ToString())
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多