System.XML.XmlException:''是一个意外的令牌。预期的标记是';'

时间:2013-07-29 18:41:24

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

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

' ' 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">

6 个答案:

答案 0 :(得分:11)

我在网址中发现的问题是&符号&,其中分号;没有跟随它。

例如:

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

幸运的是,URL不需要在我的HTML代码中包含&符号,所以我完全删除了它。我猜URL编码会有所帮助,如果需要,可将其替换为&amp;

答案 1 :(得分:8)

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

答案 2 :(得分:6)

HTML与XML不同。 XML比HTML有更严格的规则。可能你的HTML不是格式良好的XML。除非您可以确保HTML符合XHTML,否则无法使用XML解析器解析HTML。请改用HTML Agility Pack

答案 3 :(得分:2)

您可以在w3c验证器http://validator.w3.org/

中查看您的文档

答案 4 :(得分:0)

另一件事要看, XML不允许没有值的HTML属性。

例如;

<input required name="Entity" />

无法作为XML文档加载,并且会引发错误,如下所示:

  

“名称”是意外令牌。预期的令牌为“ =”。

因此更好地使用:

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

答案 5 :(得分:-1)

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