0

我有一个正在编写的 Windows 窗体应用程序,我想创建一个 xml 文件并向其中添加数据。

代码如下。

 xmlFile = new XDocument(
                    new XDeclaration("1.0", "utf-8", "yes"),
                    new XComment("XML File for storing " + RootName));
xmlFile.Add(new XElement(RootName));

// Loop through the list and create a new element for each item in the list
foreach (Contact c in contactsList)
{
    try
    {
        xmlFile.Add(new XElement("Contact",
            new XElement("Name", c.Name),
            new XElement("Email", c.EmailAddress),
            new XElement("Mobile Number", c.MobileNumber),
            new XElement("Mobile Carrier", c.sMobileCarrier)
            )
        );
    }
    catch
    {
        MessageBox.Show("ERROR WITH NEW ELEMENTS");
    }
}
xmlFile.Save(FileName);

当我运行程序时,try 块抛出错误,并且我收到消息框错误。当我调试时,程序说异常与:

The ' ' character, hexadecimal value 0x20, cannot be included in a name.

我不确定这意味着什么,因为我检查了所有传入的值并一直到入口点,那里有些东西。

我是否缺少xmlFile.Add()语句中的参数?

最后一个问题,当我在创建 XDocument 对象后插入 Root 元素时,它在文件中显示为<Contacts />,我想成为结束根标记。

如何插入起始标签,然后在最后保存时,它会附加结束标签?

谢谢

更新--------------------- 感谢 MarcinJuraszek,我能够克服抛出的异常,但现在我得到了这个错误:

This operation would create an incorrectly structured document.

任何想法这意味着什么或导致它的原因是什么?

4

1 回答 1

2

错误消息很明确:XML 元素名称不能包含空格。你正试图做到这一点:

        new XElement("Mobile Number", c.MobileNumber),
        new XElement("Mobile Carrier", c.sMobileCarrier)

将这些行更改为不包含空格,它应该可以工作。例如

        new XElement("MobileNumber", c.MobileNumber),
        new XElement("MobileCarrier", c.sMobileCarrier)

如何插入起始标签,然后在最后保存时,它会附加结束标签?

不要担心开始/结束标签。XElement.Save方法会解决这个问题。

更新

这里的第二个问题是一个事实,即您正在尝试创建具有多个根元素的文档。那是因为XElement您不是将新内容添加到根目录中,而是尝试将其直接添加到XDocument实例中。

尝试以下操作:

    xmlFile.Root.Add(new XElement("Contact",
        new XElement("Name", c.Name),
        new XElement("Email", c.EmailAddress),
        new XElement("MobileNumber", c.MobileNumber),
        new XElement("MobileCarrier", c.sMobileCarrier)
        )
于 2013-10-16T18:51:29.477 回答