1

我想分析html页面的结构。对于一个页面,我将它作为一个字符串,我想去掉文本并只保留 html 结构。我不想使用 DOM 解析器,我需要一些健壮的东西,它不仅适用于 xhtml,而且适用于常规 html。我知道正则表达式足以从字符串中去除 html 标签,但是它们可以用来去除文本并只保留 html 标签吗?

你知道我可以使用的任何其他选项/框架吗?

4

5 回答 5

2

我怀疑使用正则表达式是否有一种简单的方法可以做到这一点。

Jericho是一个非常简洁的 HTML 解析器,占用空间小,只有一个 jar,无需额外的外部库。

于 2012-12-18T15:29:46.633 回答
0

你知道我可以使用的任何其他选项/框架吗?

你可能想看看JSoup。似乎旨在解决此类问题。

于 2012-12-18T15:30:51.263 回答
0

如果你之前已经去掉了标签,你就知道基本的要点是去掉 < 和 > 之间的所有内容。去除文本非常相似,只是你去除了 > 和 < 之间的所有内容。所以是的,正则表达式可以很好地为您去除文本并只留下标签。如果您不想处理它们,它们也可以用于去除标签属性。

于 2012-12-18T15:30:57.417 回答
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;
    }
}
于 2012-12-18T16:05:50.330 回答
0

类似于以下内容:

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

应该让你开始。

于 2012-12-18T21:48:03.223 回答