0


0

HTMLブロックにテキストノードが含まれていないかどうかを判断する方法

HTMLのブロックにゼロのテキストノードが含まれているかどうかを確認する方法はありますか?

e.g. この:


これに対して、ゼロのテキストノードが含まれます。

Stuffother stuff

2つ含まれています。

さらに、HTMLがXHTML準拠であり、コンテンツのサイズがおそらく4k未満であることが保証されます。 私は.netを使用しているため、何らかのサーバー側の提案が行われた場合は、C#で作成してください。 XmlDocumentにロードし、空でないXmlTextノードを探してDOMツリーを走査できると思いますが、速度が最重要事項であるため、これは最後の手段になります。

4 Answer


1


私はあなたが提案することを正確に行います-空でないXMLTextノードを探します。 XMLには一貫した字句形式がないことに注意してください(例: 引用、空白、CDATAはすべて問題を引き起こします)。 試してみるまで、DOMを使用するとパフォーマンスが低下することを知っていますか?

更新 XmlDocument(またはXDocument)を使用する必要はありません。 この問題に対処する多くのツールがあります。 StAX http://en.wikipedia.org/wiki/StAX-ストリーミングXMLパーサー-のようなものを見てください。空でないテキストノードに到達するとすぐにできます。 XMLコミュニティーは、パフォーマンスの最適化に多くの努力を注いできました。 Saxon(http://saxon.sourceforge.net/)またはlibxml2(http://xmlsoft.org/)に必要なものがあることがわかります。 「libxml2を使用したプログラミングは、異国人のスリリングな抱擁に似ています。」マーク・ピルグリム。

いずれにせよ、XML-DEVに関する質問(http://www.xml.org/xml-dev/-私が提案したことをお気軽に申し上げてください)を明確にしないと失望します。役に立つ提案。


1


HTMLの特定のブロックがあれば、 <、 `>`内のすべての要素、および空白であるすべての要素を常に取り除き、残りの文字列が空かどうかを確認できます。 このアプローチは、正規表現を処理する任意の言語で機能しますが、javascriptの例を次に示します。

var isEmpty = someNode.innerHTML.replace(/<[^>]+>/g, "").replace(/\s/g, "") == ""


0


間違っていなければ、innerTextプロパティを使用して(Internet Explorerには他のブラウザーに同等のものがあり、名前を覚えていない)、空の文字列と比較することができます。

考え直して、このプロパティは空白を取り除くかもしれませんが、一見の価値があります。


0


正規表現を使用しない理由は次のとおりです。

次のHTMLは、HTML 4.01検証に合格します。

demo

someNodeがdivの場合、dの正規表現は失敗します。 正規表現が単純な有効なHTMLでさえ対処できない場合、無効なマークアップではどのような可能性がありますか?