2012-12-18 76 views
1

我想分析html頁面的結構。對於一個頁面,我把它作爲一個字符串,我想刪除文本並只保留html結構。我不想使用DOM解析器,而且我需要一些健壯的工具,它不僅適用於普通的html,而且還適用於xhtml。我知道正則表達式足以去除字符串中的html標籤,但是它們可以用於去除文本並僅保留html標籤嗎?如何從Java和Html字符串中去除文本

您是否知道我可以使用的其他選項/框架?

+0

我會明確地追求一個DOM解析器... –

+0

我想避免一個DOM解析的原因是,我想將結果的html用作字符串而不是DOM。但是,我可以使用DOM解析器去除文本,然後將其作爲字符串獲取。這也行得通,我只想知道我有什麼其他選擇。 – adiian

回答

0

您是否知道我可以使用的其他選項/框架?

你可能想看看JSoup。似乎旨在解決這種類型的問題。

2

我懷疑有一個簡單的方法來使用正則表達式來做到這一點。

Jericho是一個相當整潔的HTML解析器,佔用空間小,而且沒有額外的外部庫。

+0

我以前一直在使用Jericho,並且嘗試了我的特定任務,但它似乎不適合更改html結構。例如,你需要一個特殊的TextExtractor類來訪問文本的html標籤。似乎很難刪除每個節點中的文本,因爲似乎沒有任何更改內部html的方法。我應該嘗試JSoup,它似乎更適合我的目的。 – adiian

0

如果您之前已經剝離了標籤,則知道其基本要點是剝離<和>之間的所有內容。刪除文本是非常相似的,除非你刪除了>和<之間的所有內容。所以是的,正則表達式可以很好地爲您提供剝離文本並留下標籤的功能。如果你不想處理它們,它們也可以用來去除標籤屬性。

0

這可能會給你一個體面的開始。我對HTML沒有太多的經驗,所以我不知道除了<標籤>還有其他什麼東西可以解析出來。

public static void main(String[] args){ 
    String html = "<body> text text text text </body>"; 
    String htmlTags = null; 
    char c; 
    for(int i = 0 ; i < html.length() ; i++){ 
     c = html.charAt(i); 
     if(tagStart(Character.toString(c))){ 
      for(int j = i ; j < html.length() ; j++){ 
       if(htmlTags != null){ 
        htmlTags += Character.toString(html.charAt(j)); 
       }else{ 
        htmlTags = Character.toString(html.charAt(j)); 
       } 
       c = html.charAt(j); 
       if(tagStop(Character.toString(c))){ 
        break; 
       } 
      } 
     } 
    } 
} 

private static boolean tagStart(String check){ 
    if(check.equals("<")){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

private static boolean tagStop(String check){ 
    if(check.equals(">")){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
+0

這是一個很好的開始如果我沒有任何其他健壯的方法。有幾件事我會嘗試DOM或任何其他解析器/庫,甚至直接解析之前的正則表達式。首先,我必須保留包含的「文本」,如

0

線沿線的東西:

pageSource.replaceAll(">.*<", "><"); 

應該讓你開始。