0

我收到一段 HTML 文档作为 Java 字符串,我想提取它的内部文本。例如:你好世界 ---->你好世界

有没有办法使用java标准库提取文本?可能比带有空字符串的打开/关闭标签正则表达式更有效?谢谢,

4

4 回答 4

2

我还要说 - 不要在 HTML 中使用正则表达式。;-)

你可以试一试 JTidy

于 2012-07-12T07:40:28.073 回答
2

不要使用正则表达式来解析 HTML,而是使用像HtmlCleaner这样的专用解析器。

使用正则表达式通常会在第一次测试时起作用,然后开始变得越来越复杂,直到最终无法适应。

于 2012-07-12T07:38:51.647 回答
2

不要使用正则表达式来解析 HTML,例如使用jsoup: Java HTML Parser。它有一种从 DOM 中选择元素的便捷方式。

示例 获取 Wikipedia 主页,将其解析为 DOM,然后从新闻部分中选择标题到元素列表中:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

JDK 中还有一个 HTML 解析器:javax.swing.text.html.parser.Parser,可以这样应用:

Reader in = new InputStreamReader(new URL(webpageURL).openConnection().getInputStream());
ParserDelegator parserDelegator = new ParserDelegator();
parserDelegator.parse(in, harvester, true);

然后,根据您要查找的类型:开始标签、结束标签、属性等,您定义适当的回调函数:

@Override
public void handleStartTag(HTML.Tag tag,
        MutableAttributeSet mutableAttributeSet, int pos) {

    // parses the HTML document until a <a> or <area> tag is found
    if (tag == HTML.Tag.A || tag == HTML.Tag.AREA) {

        // reading the href attribute of the tag
        String address = (String) mutableAttributeSet
                .getAttribute(Attribute.HREF);

    /* ... */
于 2012-07-12T07:39:41.733 回答
1

您可以使用HTMLParser,这是一个开源的。

于 2012-07-12T07:48:41.440 回答