在C#中编写XML - '状态Epilog中的Token StartElement将导致无效的XML文档'错误

时间:2010-07-20 09:28:01

标签: c# xml

我正在尝试写入XML文档,从列表的ArrayList中获取数据

        for (int i = 0; i < 15; i++)
        {
            string headname = (headers[0] as List<string>)[i];
                headname.Replace("&", "&amp;");
                headname.Replace("<", "&lt;");
                headname.Replace(">", "&gt;");
                headname.Replace("\"", "&quot;");
                headname.Replace("'", "&apos;");
            textWriter.WriteStartElement("MetadataName", "");
            textWriter.WriteString(headname);
            textWriter.WriteEndElement();

我遇到的问题是,在经过for循环一次之后,我得到一个'状态Epilog中的Token StartElement将导致无效的XML文档'错误就行了WriteStartElement,我试过看了如何解决它并没有真正有任何突破。感谢。

已获得更新。

2 个答案:

答案 0 :(得分:7)

XML文档将具有根元素,即包含所有其他元素的元素。你没有一个

您的文档就像

<MetadataName><header0/><header1/></MetadataName>
<MetadataName><header0/><header1/></MetadataName>

XML文档就像

<root>
    <MetadataName><header0/><header1/></MetadataName>
    <MetadataName><header0/><header1/></MetadataName>
</root>

你需要在循环

周围使用WriteStartElement和WriteEndElement

答案 1 :(得分:6)

你的问题在这里:

textWriter.WriteStartElement("Metadata Name", "");

元素名称不能包含空格。试试这个:

textWriter.WriteStartElement("MetadataName", "");

我假设您的headers数组中的数据格式适用于XML(例如,所有&都转义为&amp;等等。)

此外,正如Mark在他的回答中所说,你需要确保XML是有根的 - 也就是说,有一个根元素可以放置你的MetadataName元素。

了解well formed XML以及这意味着什么 - 在构建文档时,您需要确保文档格式正确。