我是一个从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
它似乎工作得很好,但是如果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 ......我只是想复杂化: - (
答案 0 :(得分:3)
HTML和XML不是可互换的格式,如果你试图将其搞砸,你可能会看到一大堆不同的问题。
我建议使用HTML解析器(可能是http://jsoup.org/)而不是SAX解析器来解析HTML。
答案 1 :(得分:0)
添加一个预测并测试它是否已关闭。如果没有,则应用闭包。
(?=regex1)regex2
仅当regex1匹配时才处理regex2。