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">
この問題は、名前にスペースを含む「名前」属性が原因でした。すべてを調べて解決したら、HTMLをXMLドキュメントとして読み込むことができました。
私が判明した問題は、セミコロン&
が後に続かないURLのアンパサンド;
でした。
例えば:
<a href="http://www.something.com?id=123&name=456"></a>
幸い、URLにはHTMLコードにアンパサンドビットを含める必要がなかったため、完全に削除しました。 URLエンコーディングが役立つと思いますが、必要な場合は&
に置き換えます。
HTMLはXMLとは異なります。 XMLには、HTMLよりもはるかに厳しい規則があります。おそらく、HTMLは整形式のXMLではありません。 HTMLがXHTMLに準拠していることを確認できない限り、XMLパーサーでHTMLを解析することはできません。代わりに HTML Agility Pack を使用してください。
ドキュメントをw3cバリデーターで確認できます http://validator.w3.org/
もう1つ注目すべきことは、XMLはその値なしでHTML属性を許可しないことです。
例えば。;
<input required name="Entity" />
xMLドキュメントとしてロードできず、次のようなエラーが発生します。
「名前」は予期しないトークンです。期待されるトークンは「=」です。
したがって、使用するのが良い:
<input required="required" name="Entity" />