2011-07-24 10 views
0
私は、HTML内の不正なHTMLとHTMLタグに対処する必要が

属性:これはHtmlパーサーにとって適切なシナリオではありませんか?

<p class="<sometag attr="something"></sometag>"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

は、私がコンテンツを解析するHtmlAgilityPackを使用してみましたが、あなたがHTMLDocumentのに上記のコードをロードし、OuterHtml出力:

<p class="<sometag attr=" something"="">"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

pタグが不正な形式になり、それが本当に属性内のテキストですが、aタグの属性href内部someothertagが(ノードとして認識されていない、私はそれがRECOになりたいですタグとしてgnized)。

このように悪いHTMLを解析するのに役立つものがありますか?

+0

本当にそのようなものを解析することはできません。少なくともあなたが望むように常に働く方法ではありません。なぜこのような恐ろしいものを解析する必要がありますか? – svick

+0

私は誰がそのようなことを生み出すのかを知りたいのですか? – ChaosPandion

+0

これは私が対処する必要があるカスタムテンプレートの構文です。 – Omar

答えて

1

これはおそらくまれなケースなので、多くのパーサーに質問しているかもしれません。あなた自身でこれを解決する必要があるかもしれません。

私が見る大きな問題は、属性値に二重引用符があることです。マークアップにはすべての開始に常に一致する終了文字が付いていることが保証されていますか?言い換えれば、すべての<のために>、すべての開口部または"、マッチング閉鎖マークのためには、あるでしょう?

そのような場合、私の提案は、元を取ることになりますHtml Agility PackのようなHTMLパーサーで、属性の解析にいくつかの機能を追加します。スタックを使用して、すべての開始文字に対してそれを押してから別の開始文字または終了文字を見つけるまで読み込みます。 、それをポップしてください。

代わりに、より小さいとグレーの検出を追加することができますすべてのタグが閉じられるまで属性値の末尾を認識しません。

ソースマークアップをパーサーに渡す前に変更し、属性値の不正な文字をエスケープ文字(アンパサンド - セミコロン)に変更する方法もあります。残念ながら、これはあなたの一部の予備的な解析を行う必要があります。

2

それは有効なhtmlではないので、私はあなたがそれを解析するためにhtmlパーサーに頼ることはできないと思います。

関連する問題