是否可以使用 Jsoup 1.8.1 将 HTML 转换为 XHTML?

Posted

技术标签:

【中文标题】是否可以使用 Jsoup 1.8.1 将 HTML 转换为 XHTML?【英文标题】:Is it possible to convert HTML into XHTML with Jsoup 1.8.1? 【发布时间】:2015-05-19 04:08:21 【问题描述】:
String body = "<br>";
Document document = Jsoup.parseBodyFragment(body);
document.outputSettings().escapeMode(EscapeMode.xhtml);
String str = document.body().html();
System.out.println(str);

期望:&lt;br /&gt;

结果:&lt;br&gt;

Jsoup 可以将值 HTML 转换为 XHTML 吗?

【问题讨论】:

奇怪,它对我来说很好用。我使用1.7.2 版本对其进行了测试。 不适合我,我正在使用1.8.1 【参考方案1】:

Document.OutputSettings.Syntax.xml:

private String toXHTML( String html ) 
    final Document document = Jsoup.parse(html);
    document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);    
    return document.html();

【讨论】:

您很可能还想:document.outputSettings().escapeMode(org.jsoup.nodes.Entities.EscapeMode.xhtml)&amp;nbsp; 转换为 &amp;#xa0; — xhtml 中不允许使用前者。【参考方案2】:

你应该告诉那个语法你想把字符串留在 HTML 或 XML 中。

public String parserXHtml(String html) 
        org.jsoup.nodes.Document document = Jsoup.parseBodyFragment(html);
        document.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml); //This will ensure the validity
        document.outputSettings().charset("UTF-8");
        return document.toString();
    

【讨论】:

【参考方案3】:

您可以使用 JTidy API 来执行此操作。使用 jtidy-r938.jar

可以使用以下方法从html中获取xhtml

public static String getXHTMLFromHTML(String inputFile,
            String outputFile) throws Exception 

        File file = new File(inputFile);
        FileOutputStream fos = null;
        InputStream is = null;
        try 
            fos = new FileOutputStream(outputFile);
            is = new FileInputStream(file);
            Tidy tidy = new Tidy(); 
            tidy.setXHTML(true); 
            tidy.parse(is, fos);
         catch (FileNotFoundException e) 
            e.printStackTrace();
        finally
            if(fos != null)
                try 
                    fos.close();
                 catch (IOException e) 
                    fos = null;
                
                fos = null;
            
            if(is != null)
                try 
                    is.close();
                 catch (IOException e) 
                    is = null;
                
                is = null;
            
        

        return outputFile;
    

【讨论】:

以上是关于是否可以使用 Jsoup 1.8.1 将 HTML 转换为 XHTML?的主要内容,如果未能解决你的问题,请参考以下文章

HTMLXML 等 Dom 结点类解析库Jsoup

Java爬虫利器HTML解析工具-Jsoup

如何使用 Jsoup 提取单独的文本节点?

使用JSoup,你能得到一个节点在html中的位置/索引吗?

jsoup教程

无法使用 JSoup 和 Java 保存修改后的 HTML 文件