【问题标题】:This document already has a ' DocumentElement ' node此文档已经有一个“DocumentElement”节点
【发布时间】:2011-06-07 08:52:14
【问题描述】:

我在文件末尾添加一个新节点,但出现写入错误:

此文档已经有一个“DocumentElement”节点。

我的代码:

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);

我的 XML 文件:

<?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>

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    你应该使用

    XmlNode refElem = doc.DocumentElement.LastChild;
    

    doc.DocumentElement.InsertAfter(entryElement, refElem);
    

    编辑

    你也可以使用

    doc.DocumentElement.AppendChild(entryElement);
    

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

    【讨论】:

    • 谢谢,工作,但添加了一个新节点,为什么不在文件末尾?
    • 你也可以使用doc.DocumentElement.AppendChild(entryElement)而不需要引用元素。
    • 因为插入第一个新节点后,refElem 不再是最后一个子节点。然后你需要写 doc.DocumentElement.InsertAfter(entryElement, doc.DocumentElement.LastChild) 插入在当前最后一个孩子之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多