如何将HTML转换为文本保持换行符

时间:2010-03-25 07:24:29

标签: java html

如何将HTML转换为文本保留换行符(由br,p,div等元素生成)可能使用NekoHTML或任何体面的HTML解析器

例:
Hello<br/>World
到:

Hello\n  
World  

6 个答案:

答案 0 :(得分:8)

这是我通过使用Jsoup迭代节点来输出文本(包括换行符)的函数。

public static String htmlToText(InputStream html) throws IOException {
    Document document = Jsoup.parse(html, null, "");
    Element body = document.body();

    return buildStringFromNode(body).toString();
}

private static StringBuffer buildStringFromNode(Node node) {
    StringBuffer buffer = new StringBuffer();

    if (node instanceof TextNode) {
        TextNode textNode = (TextNode) node;
        buffer.append(textNode.text().trim());
    }

    for (Node childNode : node.childNodes()) {
        buffer.append(buildStringFromNode(childNode));
    }

    if (node instanceof Element) {
        Element element = (Element) node;
        String tagName = element.tagName();
        if ("p".equals(tagName) || "br".equals(tagName)) {
            buffer.append("\n");
        }
    }

    return buffer;
}

答案 1 :(得分:3)

w3m -dump -no-cookie input.html > output.txt

答案 2 :(得分:2)

我确实在html2txt: THE ASCIINATOR中找到了一个相对聪明的解决方案,它在生成类似输出的nroff方面做了令人钦佩的工作(例如在终端上运行man ls)。它以StackOverflow用作输入的Markdown样式生成输出。

对于像此页面这样的中等复杂页面,输出为somewhat scattered,因为它会大力尝试将非线性布局转换为线性布局。较不复杂的标记的输出是pretty readable

答案 3 :(得分:2)

如果你不介意硬包装/设计为等宽的输出,lynx -dump会从HTML中生成好的纯文本。

答案 4 :(得分:0)

HTML to Text: 我将此声明表示将放弃除换行符之外的所有HTML格式。

我为这样的冒险所做的是使用正则表达式来检测任何一组标签圈。 如果标签内的值为br或br /,则插入换行符,否则标签将被丢弃。

它仅适用于简单的html页面。表格显然是线性化的。

我一直在考虑检测标题标签附件之间的标题值,以便转换器自动将标题放在页面顶部。需要加入更多算法。按照我的时间更好地度过......

我正在阅读使用Google数据API将文档上传到Google文档,然后使用相同的API将其下载/导出为文本。或者,为什么文本,当我可以做pdf。但如果您还没有Google帐户,则需要获得Google帐户。

Google docs data download/export

Google docs data api for java

答案 5 :(得分:-2)

您使用的语言是否重要?你总是可以使用模式匹配。基本上HTML lien break标签(br,p,div,...)可以替换为“\ n”并删除所有其他标签。您始终可以将标记存储在数组中,以便您可以轻松检查何时浏览HTML文件。然后任何其他标签和所有其他结束标签(/ p,..)可以用空字符串替换,从而获得结果。