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

10

我有一个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">

从经验来看,它相当准确,可能会多出一两行。 - Sayse
似乎你给了一些空间。 - Uselesssss
我已经在提示错误的那一行上面和下面各贴了3行,并在上方标出了错误行。 - Stephen Wigginton
在td中使用div不是一个好主意... - kul_mi
@StephenDubya能否插入更多的代码?我认为有一个实体后面没有跟分号。 - kul_mi
显示剩余3条评论
6个回答

21

我遇到的问题是在URL中使用了一个“&”,但并没有接着使用半角分号“;”。

例如:

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

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


9

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


8

HTML与XML不同。XML比HTML具有更严格的规则。也许您的HTML不是格式良好的XML。除非您能确保您的HTML符合XHTML标准,否则您不能使用XML解析器解析HTML。请改用HTML Agility Pack


2

1
另外需要注意的是,XML不允许出现没有值的HTML属性。

e.g.;

<input required name="Entity" />

无法作为XML文档加载,会引发以下错误:

'name'是意外的标记。预期的标记是'='。

因此最好使用:

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

-1

错误通常是描述性的,说明您的属性名称包含空格,这在XML解析器中是不允许的。您需要将其删除以符合XML标准。您应该使用HTML Agility Pack [http://htmlagilitypack.codeplex.com/] 代替。


4
这只是在重复OP和另一个回答已经陈述的内容(将近一年后)。 - Matt Sach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接