2

给定一大块在 and 中很好地显示数据的 HTML,我怎样才能删除所有 html 标记并附加最初包装在 td, div 中的文本并在 Java 中使用换行符?

基本上,这将是尝试将 html 转换为常识中的常规文本。

4

3 回答 3

1

我在想这样的事情..

// input an HTML page
String htmlPage = "<html><body>Hello,</br>World</body></html>";

// convert <br>,<hr>, and <hX> to new-line
String temp = htmlPage.replaceAll("(< *br *>< *br */>|< *br *>|< *br */>|< *hr[^>]*>|< *h[1-6][^>]*/>)","\n");

// remove all tags
String text = temp.replaceAll("<[^>]>","");

System.out.println(text);

应该打印

Hello,
World

您可以对此进行更多调整,例如您可以替换<body><div>使用类似\n----------------\n定义某些结构的东西..

考虑以下输入

<html>
  <head>
    <title>Title</title>
    <script>alert("this is a test");</script>
    <style>p{ font-family: "Times New Roman"; }</style>
  </head>
  <body>
    <h1>Test</h1>
    <div><p>This is the first line<br/>This is the second line</p></div>
  </body>
</html>

代码

// convert <br>,<hr>, and <hX> to new-line
String temp = htmlPage.replaceAll("(< *br *>< *br */>|< *br *>|< *br */>|< *hr[^>]*>|< *h[1-6][^>]*/>)","\n");

// seperate HTML structures
temp = temp.replaceAll("(< *head *>|</? *body *>)","\n================\n");

// seperate HTML structures
temp = temp.replaceAll("(< *div *>|< *script *>|< *style *>)","\n----------------\n");

// get rid of empty lines
temp = temp.replaceAll("\n *\n","");

// remove all tags
String text = temp.replaceAll("<[^>]>","");

System.out.println(text);

应该打印

================
Title
----------------
alert("this is a test");
----------------
p{ font-family: "Times New Roman"; }
================
Test
----------------
This is the first line
This is the second line
================
于 2013-06-01T06:36:49.073 回答
0

你可以使用jsoup

jsoup 是一个用于处理真实世界 HTML 的 Java 库。它提供了一个非常方便的 API 用于提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。

Jsoup.parse(htmltext).text();

您可以在 Jsoup 中找到各种方法

于 2013-06-01T05:03:45.103 回答
0

您应该为此使用 [jsoup][1]。使用这个工具很容易解析 HTML 页面。

您可以获得 HTML 文档并可以遍历此处提到的元素:

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

入门指南很容易学习并实现您想要做的事情。

于 2013-06-01T05:05:08.500 回答