【发布时间】:2014-11-13 19:31:33
【问题描述】:
我正在寻找一种在 Java 中解析这种 HTML 的方法。
<tr class="cBackHeader backCat" ...>
<th class="padding" ...>
...
<a href="{{URL CATEGORY}}" class="cHeader">{{TITLE CATEGORY}}</a>
</th>
</tr>
(<tr class="sujet..." ...>
...
<td ... class="subjectCase3" ...>
<a href="{{URL TOPIC}}" class="cCatTopic" title="{{ID TOPIC}}">{{TITLE TOPIC}}</a>
</td>
...
</tr>)+
我想在 {{ }} 之间整理好每个变量。 我已经设法获得了这种模式的第一部分:
<th class=\"padding\".*?>.*?<a href=\"(.+?)\" class=\"cHeader\">(.+?)</a></th>
但我不知道如何处理第二部分(它们可能有很多 td.subjectCase3)。
编辑:这是我使用 Jsoup 的解决方案,但这不如使用 Pattern 和 Matcher 优化。
Document document = Jsoup.parse(response);
Element tmp;
Elements elements = document.select("tr.cBackHeader,tr.sujet");
for (Element el : elements) {
if (el.hasClass("cBackHeader")) {
tmp = el.select("a.cHeader").first();
result.add(new TopicItem(null, tmp.ownText()));
} else if (el.hasClass("sujet")) {
tmp = el.select("td.sujetCase3 a").first();
result.add(new TopicItem(new Topic(tmp.attr("title"), tmp.attr("href"), tmp.ownText()), null));
}
}
你怎么看?
【问题讨论】:
-
获取 DOM Parser 依赖项。用它。不是正则表达式。解析 HTML 的正则表达式不是万无一失的,而且会搞砸你,尤其是当你匹配的文件是 this HTML.
-
像 Jsoup 这样的 DOM 解析器?
-
是的,Jsoup 是可靠的解析器之一。使用它。
-
您无法使用正则表达式解析 [X]HTML:stackoverflow.com/a/1732454/64217
-
你知道如何用 Jsoup 做到这一点吗?尤其是第二部分
标签: java regex parsing html-parsing