2009-05-05 12 views
1

私がHTMLを解析するとき、私はドキュメント全体の最も内側のタグだけを取得したいと考えています。私の意図は、HTML文書からデータを意味的に解析することです。私はこのHTML解析 - 最も内側のHTMLタグを取得

<html> 
    <table> 
      <tr><td>X</td></tr> 
      <tr><td>Y</td></tr> 
    </table> 
</html> 

のような一部のHTMLを持っている場合

は、だから私は一人で<td>X</td><td>Y</td>たい。これは美しいスープやlxmlを使って可能ですか?

答えて

2

ドキュメントが整形式であることを確認したら(たとえば、lxmlを使用して解析することによって)、XPathを使用して子要素がないノードをすべて問い合せることができます。

//*[count(*) = 0]
+0

HTMLないXHTML - そう習慣作業ためなどうまく形成されません。 –

+0

私はXPathが動作するはずのlxmlについて言及していました。 – Tomalak

3

私はHtmlAgilityPackライブラリを使用して、すべてのhtml解析を簡単に行いました。それはDOMをロードし、あなたのノードでは子ノードのないノードを選択することができます。多分それは助けます。

0

これは、実際に正規表現を使用してHTML文字列を解析できる数少ない状況の1つです。

\<(\w+)[^>]*>[^\<]*\</\1\s*> 
0

あなたはすべてのタグののparentNode属性と連携し、再帰的に合計をカウントし、最大のものを維持することができます使用するか(つまり、ブラウザに)扱うDOMことができます。 (FireFoxの上でテスト)のJavaScript-擬似コードで

var allElements = document.getElementsByTagName("*"); 
var maxElementReference, maxParentNodeCount = 0; 
var i; 

for (i = 0; i < allElements.length; i++) { 

    var count = recursiveCountParentNodeOn(allElements[i]); 

    if (maxParentNodeCount < count) { 
     maxElementReference = allElements[i]; 
     maxParentNodeCount = count; 
    } 
} 
関連する問題