我想分析html页面的结构。对于一个页面,我将它作为一个字符串,我想去掉文本并只保留 html 结构。我不想使用 DOM 解析器,我需要一些健壮的东西,它不仅适用于 xhtml,而且适用于常规 html。我知道正则表达式足以从字符串中去除 html 标签,但是它们可以用来去除文本并只保留 html 标签吗?
你知道我可以使用的任何其他选项/框架吗?
我怀疑使用正则表达式是否有一种简单的方法可以做到这一点。
Jericho是一个非常简洁的 HTML 解析器,占用空间小,只有一个 jar,无需额外的外部库。
你知道我可以使用的任何其他选项/框架吗?
你可能想看看JSoup。似乎旨在解决此类问题。
如果你之前已经去掉了标签,你就知道基本的要点是去掉 < 和 > 之间的所有内容。去除文本非常相似,只是你去除了 > 和 < 之间的所有内容。所以是的,正则表达式可以很好地为您去除文本并只留下标签。如果您不想处理它们,它们也可以用于去除标签属性。
这可能会给你一个不错的开始。我对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;
}
}
类似于以下内容:
pageSource.replaceAll(">.*<", "><");
应该让你开始。