【问题标题】:Writing XML in C# - 'Token StartElement in state Epilog would result in an invalid XML document' error在 C# 中编写 XML -“状态 Epilog 中的令牌 StartElement 将导致无效的 XML 文档”错误
【发布时间】:2010-07-20 18:09:06
【问题描述】:

我正在尝试写入 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 循环一次后,我在 WriteStartElement 行上得到一个“处于状态 Epilog 的令牌 StartElement 将导致无效的 XML 文档”错误,我尝试查找up如何解决它,并没有真正有任何突破。谢谢。

已编辑更新。

【问题讨论】:

  • 您的原始代码显示有问题,请不要放回框架代码

标签: c# xml


【解决方案1】:

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

你的文档是这样的

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

XML 文档就像

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

您需要在循环周围使用 WriteStartElement 和 WriteEndElement

【讨论】:

  • 谢谢!它现在保存;接下来要做的是使其成为有效的 XML。
【解决方案2】:

你的问题在这里:

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

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

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

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

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

了解well formed XML 及其含义 - 在构建文档时,您需要确保文档格式正确。

【讨论】:

  • 我照你说的做了;从名称中删除了空格,并更改了坏字符,但我一定是做错了什么或者我的数组有问题,因为我仍然得到错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多