加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 防止Jsoup.parse删除结束标记

发布时间:2020-12-15 04:37:01 所属栏目:Java 来源:网络整理
导读:我正在使用Jsoup.parse解析一段html. 其他一切都很棒,但我应该稍后在pdf转换器中解析这个HTML. 由于某种原因,Jsoup.parse删除了结束标记,而pdf-parser抛出了关于缺少关闭img标记的异常. Can't load the XML resource (using TRaX transformer). org.xml.sax.
我正在使用Jsoup.parse解析一段html.

其他一切都很棒,但我应该稍后在pdf转换器中解析这个HTML.

由于某种原因,Jsoup.parse删除了结束标记,而pdf-parser抛出了关于缺少关闭img标记的异常.

Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException; 
lineNumber: 115; columnNumber: 4; The element
type "img" must be terminated by the matching end-tag "</img>"

如何防止Jsoup.parse删除关闭的img标记?

例如这一行:

<img src="C:pathtoimageimage.png"></img>

转向:

<img src="C:pathtoimageimage.png">

同样的情况:

<img src="C:pathtoimageimage.png"/>

这是代码:

private void createPdf(File file,String content) throws IOException,DocumentException {
        OutputStream os = new FileOutputStream(file);
            content = tidyUpHTML(content);
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(content);
            renderer.layout();
            renderer.createPDF(os);
        os.close();
    }

这是上面方法中调用的tidyUpHTML方法:

private String tidyUpHTML(String html) {
    org.jsoup.nodes.Document doc = Jsoup.parse(html);
    doc.select("a").unwrap();
    String fixedTags = doc.toString().replace("<br>","<br />");
    fixedTags = fixedTags.replace("<hr>","<hr />");
    fixedTags = fixedTags.replaceAll("&nbsp;","&#160;");
    return fixedTags;
}

解决方法

您的PDF转换器需要xhtml(因为它需要关闭img标记).设置Jsoup以输出到xhtml(xml).

org.jsoup.nodes.Document doc = Jsoup.parse(html);
document.outputSettings().syntax( Document.OutputSettings.Syntax.xml);
doc.select("a").unwrap();
String fixedTags = doc.html();

见Is it possible to convert HTML into XHTML with Jsoup 1.8.1?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读