【问题标题】:System.XML.XmlException: ' ' is an unexpected token. The expected token is ';'System.XML.XmlException:“ ”是意外标记。预期的标记是';'
【发布时间】:2021-02-15 17:57:00
【问题描述】:

我尝试使用 XDocument.Load 加载一个 HTML 表单,但收到以下错误:

' ' is an unexpected token. The expected token is ';'. Line 1257, position 66.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)

代码只是调用以下内容:

XDocument xmlDoc = XDocument.Load(pageData.Stream);

pageData 是来自另一个系统的自定义对象,它正在输出数据流。我已经让它将 xml 导出回一个字符串,它看起来很好。

当我检查 HTML 上的那一行时,它只是一个元素的结束标记。 xml 异常给出的行/位置有多可靠?我只是将表单的源代码转储到 notepad++ 中进行验证,我看不出这会是个问题。

编辑: 以下是错误前后的前几行。我已经标记了错误行。

                                        </p>
                        </td>
                    </tr>
                </table>

            </td>
        </tr>  <----Error Line
        <tr>
            <td>
                <div id="BusinessJustificationForm">
                    <table id="BusinessJustificationTable">
                        <tr>
                            <td class="seperator" colspan="7">

【问题讨论】:

  • 根据经验,它相当准确,可能在之前/之后一两行
  • 好像给了一些空间
  • 我在提示错误的那一行上下贴了3行,并在上面标出了错误行。。
  • 你有html实体吗?
  • 在 td 中使用 div 不是一个好主意...

标签: c# xml exception linq-to-xml


【解决方案1】:

我原来的问题是 URL 中的 & 符号 &amp;amp; 没有跟随分号 ;

例如:

<a href="http://www.something.com?id=123&name=456"></a>

幸运的是,该 URL 不需要在我的 HTML 代码中包含 & 位,因此我将其完全删除。我想 URL 编码会有所帮助,如果需要,将其替换为 &amp;amp;

【讨论】:

    【解决方案2】:

    此问题是由名称中包含空格的“名称”属性引起的。一旦我完成了整个事情并解决了这个问题,我就能够将 HTML 加载为 XML 文档。

    【讨论】:

      【解决方案3】:

      HTML 不同于 XML。 XML 的规则比 HTML 严格得多。可能您的 HTML 不是格式良好的 XML。除非您可以确保您的 HTML 与 XHTML 兼容,否则您无法使用 XML 解析器解析 HTML。请改用HTML Agility Pack

      【讨论】:

        【解决方案4】:

        您可以在 w3c 验证器 http://validator.w3.org/ 中检查您的文档

        【讨论】:

          【解决方案5】:

          另一件值得关注的事情, XML 不允许没有值的 HTML 属性。

          例如;

          <input required name="Entity" />
          

          不能作为 XML 文档加载,会报错:

          'name' 是一个意外的标记。预期的标记是“=”。

          因此更好用:

          <input required="required" name="Entity" />
          

          【讨论】:

            【解决方案6】:

            该错误主要是描述您的属性名称包含空格,并且根据 XMLparser 是不允许的。您需要将其删除以符合 xml 标准。您应该改用 HTML 敏捷包 [http://htmlagilitypack.codeplex.com/]。

            【讨论】:

            • -1:这只是重复(将近一年后)OP 和其他答案之一已经说过的内容。
            猜你喜欢
            • 2012-05-23
            • 2018-10-24
            • 1970-01-01
            • 2021-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多