web-dev-qa-db-ja.com

System.XML.XmlException: ''は予期しないトークンです。予期されるトークンは「;」です。

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

この問題は、名前にスペースを含む「名前」属性が原因でした。すべてを調べて解決したら、HTMLをXMLドキュメントとして読み込むことができました。

9

私が判明した問題は、セミコロン&が後に続かないURLのアンパサンド;でした。

例えば:

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

幸い、URLにはHTMLコードにアンパサンドビットを含める必要がなかったため、完全に削除しました。 URLエンコーディングが役立つと思いますが、必要な場合は&amp;に置き換えます。

13
Nicola

HTMLはXMLとは異なります。 XMLには、HTMLよりもはるかに厳しい規則があります。おそらく、HTMLは整形式のXMLではありません。 HTMLがXHTMLに準拠していることを確認できない限り、XMLパーサーでHTMLを解析することはできません。代わりに HTML Agility Pack を使用してください。

7
fcuesta

ドキュメントをw3cバリデーターで確認できます http://validator.w3.org/

2
Fried

もう1つ注目すべきことは、XMLはその値なしでHTML属性を許可しないことです。

例えば。;

<input required name="Entity" />

xMLドキュメントとしてロードできず、次のようなエラーが発生します。

「名前」は予期しないトークンです。期待されるトークンは「=」です。

したがって、使用するのが良い:

<input required="required" name="Entity" />
0
Kumar Shishir