2009-05-05 25 views
1

當我解析HTML時,我只想獲取整個文檔的最內層標記。我的意圖是從HTML文檔語義解析數據。HTML解析 - 獲取最內層的HTML標記

所以,如果我有一些HTML這樣

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

我想單獨和<td>X</td><td>Y</td>。這可能使用美麗的湯或lxml?

回答

2

確保文檔格式正確(例如,使用lxml解析它)後,可以使用XPath查詢沒有其他子元素的所有節點。

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

HTML不是XHTML - 由於所以不會工作等沒有被很好地形成。 – 2009-05-05 14:20:36

3

在.NET中,我使用HtmlAgilityPack庫來完成所有的html分析。它加載DOM,你可以選擇節點,在你的情況下選擇沒有孩子的節點。也許這有幫助。

0

這是您可以使用正則表達式解析HTML字符串的少數情況之一。

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

如果你可以使用或DOM操作(即在瀏覽器中),您可以用parentNode工作屬性對所有的標籤和遞歸計算總,並保持最大的一個。

在JavaScript的僞代碼(上的FireFox測試):

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; 
    } 
}