2010-04-26 114 views
1

如何使用Java HTML解析器庫處理閉合標記(例如:</h1>)?Java Html解析器和閉合標記

舉例來說,如果我有以下幾點:

public class MyFilter implements NodeFilter { 

public boolean accept(Node node) { 
    if (node instanceof TagNode) { 
    TagNode theNode = (TagNode) node; 
    if (theNode.getRawTagName().equals("h1")) { 
    return true; 
    } else { 
    return false; 
    } 
    } 
    return false; 
} 
} 

public class MyParser { 
public final String parseString(String input) { 
    Parser parser = new Parser(); 
    MyFilter theFilter = new MyFilter(); 
    parser.setInputHTML("<h1>Welcome, User</h1>"); 
    NodeList theList = parser.parse(theFilter); 
    return theList.toHtml(); 
} 
} 

當我跑我的解析器,我得到下面的輸出回:

<h1>Welcome, User</h1>Welcome, User</h1> 

節點列表包含大小3與第一個列表以下實體:

(tagNode) <h1> 

(textNode) Welcome, User 

(tagNode) </h1> 

我想輸出爲「<h1>Welcome, User</h1>」。有沒有人看到我的示例解析器出了什麼問題?

回答

0

提示:

我認爲你必須依靠在這種情況下isEndTag() API。

0

您的過濾器正在接受太多的節點。對於您的示例輸入,您希望創建僅具有單個節點的NodeList - 對於<h1>標記。其他兩個節點是該第一個節點的子節點,因此不應將其添加到NodeList


如果添加下面的代碼,您可能會看到更好的問題。

for (Node node : theList.toNodeArray()) 
{ 
    System.out.println(node.toHtml()); 
} 

應該打印

<h1>Welcome, User</h1> 
Welcome, User 
</h1>