我正在编写一个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.
任何想法是什么意思或导致它的原因?
答案 0 :(得分:2)
错误消息是明确的:XML元素名称不能包含空格。你正试图这样做:
new XElement("Mobile Number", c.MobileNumber),
new XElement("Mobile Carrier", c.sMobileCarrier)
将这些行更改为不包含空格,它应该有效。 e.g。
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)
)