这份文件已经有一个“DocumentElement”节点 [英] This document already has a ' DocumentElement ' node

查看:2741
本文介绍了这份文件已经有一个“DocumentElement”节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我添加在文件的最后一个新的节点,但我得到一个写入错误:

  

该文档已经有了一个DocumentElement节点。

我的code:

  XmlDocument的文档=新的XmlDocument();
doc.Load(目录);
XmlNode的refElem = doc.LastChild; //最后一个节点

的foreach(MoneyEnter myList上的列表)
{
    的XmlElement entryElement = doc.CreateElement(输入);
    entryElement.SetAttribute(类型,myList.TypeAmount);

    的XmlElement amountElement = doc.CreateElement(额);
    amountElement.InnerText = Convert.ToString(myList.Amount);

    的XmlElement dateElement = doc.CreateElement(日);
    dateElement.InnerText = Convert.ToString(myList.Date);

    的XmlElement descriptionElement = doc.CreateElement(说明);
    XmlCDataSection cdataDescription = doc.CreateCDataSection(myList.Description);
    descriptionElement.AppendChild(cdataDescription);

    的XmlElement categoryElement = doc.CreateElement(类);
    categoryElement.InnerText = myList.Category;

    entryElement.AppendChild(amountElement);
    entryElement.AppendChild(dateElement);
    entryElement.AppendChild(descriptionElement);
    entryElement.AppendChild(categoryElement);
    doc.InsertAfter(entryElement,refElem); //在文件的最后添加新节点
}
doc.Save(目录);
 

我的XML文件:

 < XML版本=1.0编码=UTF-8&GT?;
<条目>
    <条目类型=借记>
        &其中;量> 5℃/量GT;
        <日期> 01.01.0001起0:00:00< /日期>
        <描述> ffvfd< /描述>
        <类别> fdvfvf< /类>
    < /进入>
    <条目类型=借记>
        &其中;量> 5℃/量GT;
        <日期> 01.01.0001起0:00:00< /日期>
        <描述> fvfv< /描述>
        <类别> fvfdvfd< /类>
    < /进入>
    <条目类型=借记>
        &其中;量> 5℃/量GT;
        <日期> 01.01.0001起0:00:00< /日期>
        <描述> FV GFV< /描述>
        <类别> dscdcd< /类>
    < /进入>
    <条目类型=借记>
        &其中;量> 5℃/量GT;
        <日期> 01.01.0001起0:00:00< /日期>
        <描述> vfvfv< /描述>
        <类别> cfcfc< /类>
    < /进入>
    <条目类型=借记>
        &其中;量大于7&所述; /量GT;
        <日期> 01.01.0001起0:00:00< /日期>
        <描述> gfbvgv< /描述>
        <类别> gfbgfb< /类>
    < /进入>
< /项>
 

解决方案

您应该使用

  XmlNode的refElem = doc.DocumentElement.LastChild;
 

  doc.DocumentElement.InsertAfter(entryElement,refElem);
 

修改

您也可以使用

  doc.DocumentElement.AppendChild(entryElement);
 

在这种情况下, refElem 是不需要的。

I'm adding a new node at the end of a file, but I get a write error:

This document already has a 'DocumentElement' node.

My code:

XmlDocument doc = new XmlDocument();
doc.Load(directory);
XmlNode refElem = doc.LastChild; // Last node

foreach (MoneyEnter myList in list)
{
    XmlElement entryElement = doc.CreateElement("entry");
    entryElement.SetAttribute("type", myList.TypeAmount);

    XmlElement amountElement = doc.CreateElement("amount");
    amountElement.InnerText = Convert.ToString(myList.Amount);

    XmlElement dateElement = doc.CreateElement("date");
    dateElement.InnerText = Convert.ToString(myList.Date);

    XmlElement descriptionElement = doc.CreateElement("description");
    XmlCDataSection cdataDescription = doc.CreateCDataSection(myList.Description);
    descriptionElement.AppendChild(cdataDescription);

    XmlElement categoryElement = doc.CreateElement("category");
    categoryElement.InnerText = myList.Category;

    entryElement.AppendChild(amountElement);
    entryElement.AppendChild(dateElement);
    entryElement.AppendChild(descriptionElement);
    entryElement.AppendChild(categoryElement);
    doc.InsertAfter(entryElement, refElem); //add new node in end of file
}
doc.Save(directory);

My XML file:

<?xml version="1.0" encoding="utf-8" ?>
<entries>
    <entry type="debit">
        <amount>5</amount>
        <date>01.01.0001 0:00:00</date>
        <description>ffvfd</description>
        <category>fdvfvf</category>
    </entry>
    <entry type="debit">
        <amount>5</amount>
        <date>01.01.0001 0:00:00</date>
        <description>fvfv</description>
        <category>fvfdvfd</category>
    </entry>
    <entry type="debit">
        <amount>5</amount>
        <date>01.01.0001 0:00:00</date>
        <description>fv gfv</description>
        <category>dscdcd</category>
    </entry>
    <entry type="debit">
        <amount>5</amount>
        <date>01.01.0001 0:00:00</date>
        <description>vfvfv</description>
        <category>cfcfc</category>
    </entry>
    <entry type="debit">
        <amount>7</amount>
        <date>01.01.0001 0:00:00</date>
        <description>gfbvgv</description>
        <category>gfbgfb</category>
    </entry>
</entries>

解决方案

You should use

XmlNode refElem = doc.DocumentElement.LastChild;

and

doc.DocumentElement.InsertAfter(entryElement, refElem);

EDIT

You may also use

doc.DocumentElement.AppendChild(entryElement);

In this case refElem is not needed.

这篇关于这份文件已经有一个“DocumentElement”节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆