Java关闭unclosed img标签

时间:2014-08-21 08:16:07

标签: java jsoup saxparser

我是一个从REST服务获取html的Java Web服务器。 我尝试使用SAXParser来处理它,它告诉我像img或area这样的标签需要关闭。 不幸的是我得到了像这样的img标签

<img src="https://..." style="width: 600px; height: 676px;">

哪个适用于浏览器,但不适用于我的Parser。 在解析之前我在我的内容上使用它

replaceAll("<\\s*([^\\s>]+)([^>]*)/\\s*>", "<$1$2></$1>").replaceAll("<\\s*(img|area)+((\"[^\"]*\"|[^>/])*)(?<!/)\\s*>", "<$1$2></$1>")

第一部分是将自闭标签转换为&#34;真正的&#34;封闭的标签。 第二个应该关闭unclosed标签lke img或区域在我的情况下。

我用一些例子来测试它here Test Results

它似乎工作得很好,但是如果img已经关闭它再次关闭

<area clas="" href=">" > </area> -->    <area clas="" href=">" ></area> </area>

我现在无法理解。你可以帮帮我吗? 也许我甚至需要将它概括一点?

更新 我知道使用hgex的正则表达式是不对的,但我需要将它发送到一段代码,我不允许更改使用XSLTransformation的代码,并且我在selfclosing上遇到SAXParser错误未封闭的标签。 是否可以使用jsoup将所有未闭合或自闭合标签转换为结束标签并将其作为输出?

更新 可怕......显然一切都适用于JSOUP。

Document doc = Jsoup.parse(content);
// Some additional cleanups
this.parentContent = doc.select("body").html();

我得到了我的HTML ......我只是想复杂化: - (

2 个答案:

答案 0 :(得分:3)

HTML和XML不是可互换的格式,如果你试图将其搞砸,你可能会看到一大堆不同的问题。

我建议使用HTML解析器(可能是http://jsoup.org/)而不是SAX解析器来解析HTML。

答案 1 :(得分:0)

添加一个预测并测试它是否已关闭。如果没有,则应用闭包。

(?=regex1)regex2

仅当regex1匹配时才处理regex2。