【问题标题】:Parse HTML data in Java including &lt and &gt tags?在 Java 中解析 HTML 数据,包括 &lt 和 &gt 标签?
【发布时间】:2012-12-04 12:57:39
【问题描述】:

我想用 Java 解析 HTML 文本。

我尝试使用 javax.swing.text.html.HTMLEditorKit 解析 HTML 数据。它帮助我从 HTML 中获取数据。但我有一个 HTML 数据,比如 -

<span class="TitleServiceChange" >Service Change</span>
                    <span class="DateStyle">
                     Posted: 12/16/2012  8:00PM
                    </span><br/><br/>
                  <P>

周围有 '&lt''&gt' 而不是 ' 和 '>'

在解析上述文本时,我收到了错误 -

Parsing error: start.missing body ? ? at

请建议我解决我的问题。 提前致谢。

【问题讨论】:

  • 您上面显示的 HTML 数据不是 HTML,因为它没有标签。如果您希望将 HTML 实体转换为有效的 XML 结构,则应使用 String.replace。
  • @TomLeese,如果我将此数据粘贴到浏览器中,它会正确显示,我也在 view.xmlgrid.net 中尝试过,然后它会以正确的格式显示
  • @Deepu :严格来说,上面显示的字符串就是一个字符串(因此应该显示为 text,而不是作为标记处理)。
  • 现在的浏览器有很多内置的纠错功能,所以如果它正在渲染,你的浏览器实际上可能会通过转换 < 来“修复”你输入的代码。和>在将其作为标记处理之前的符号。

标签: java html-parsing htmleditorkit


【解决方案1】:

要取消转义字符串中包含的全部转义字符,您可以使用 Apache Commons Lang 实用程序库。

具体来说,使用StringEscapeUtils 类,您可以在其中找到unescapeHtml4 方法等。

【讨论】:

  • 谢谢@TomasNarros,我会试试的。
【解决方案2】:

如果您可以获得数据的String 表示,将其替换为正确的标签可以解决您的问题:

String htmlData = ...

htmlData = htmlData.replaceAll("&lt;", "<");
htmlData = htmlData.replaceAll("&gt;", ">");

【讨论】:

  • &amp;amp;&amp;nbsp; 符号呢?
  • @TomasNarros 您也可以为这些应用 replaceAll。你怀疑什么?
  • 我看起来像一个完全转义的 HTML 片段。还可以包含其他符号。如果内容仅限于预定义的一组符号,您的解决方案可能会很有用。你不同意吗?
  • 是的@TomasNarros 指出了正确的问题,可能包含许多标签,如 &amp、br 等,我应该如何处理它。
【解决方案3】:

HTML 可以用 XML 术语来描述。 XML有字符数据的概念,显然是由字符组成的。在 XML 中有五个具有特殊含义的字符:&gt;&amp;lt;&amp;"' - 这些字符用于定义元素和分隔属性,因此解析器不会将它们视为普通个字符。当您需要在 XML 文档中插入 &amp;lt; 文字时(就像我在这个答案中所做的那样),您可以使用 &amp;lt; 形式的 字符引用,以便浏览器理解您不愿意启动 XML 标记。在 HTML4 DTD 中有252 named entities,因此使用replaceAll() 来获得可读 字符串是不可行的。

您最好了解 HTML 的工作原理,这样当您必须构建数据的存储和呈现时,您可以像 Web 浏览器一样思考。请注意:

&lt;tag&gt;

非常不同的含义
<tag>

所以你最好论证你的问题以获得正确方向的帮助。

【讨论】:

  • 感谢您的解释。当然 HTML 中有很多可用的标签,我该如何解决这个问题。
  • @Deepu 你能给出一个示例程序,或者至少说明你的输入来自哪里以及打算去哪里?
  • 我从在线 XML 文件中获取数据,其中包含这些 HTML 数据。我可以毫无问题地解析 XML 数据。此 XML 文件每分钟都会更改一次。
  • 你想用这些数据做什么?
  • 我只想从 HTML 数据中提取文本数据。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2015-08-26
  • 2013-10-12
  • 2013-01-06
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
相关资源
最近更新 更多