将 HTML 文件转换成 XML

1 篇文章 0 订阅

在 Java 专家 Michael Geisler 为 Builder 澳大利亚写的第一篇文章中,他向读者展示了如何使用 JTidy 将 HTML 文件转换成 XML。 

有关 Java 的最重要的事情是有很多扩展标准库可以作为标准平台的一部分,而且在那些库中有对 XML 提供了非常多的支持。然而对于某些特定的需要,在标准库中可能没有直接的支持。 

其实你有两个选择: 

1.完全由自己来构建一些东西。这一般很痛苦,而且很费时间。 

2.去“社区”看看是否已经有人遇到了同样的问题(这种情况非常有可能发生),看他是否乐意与你分享他的成果。 
对于这个情况,SourceForge 上有一个非常有用的小项目,叫做 JTidy。JTidy 的Web 站点位于 http://sourceforge.net/projects/jtidy/。 

JTidy 提供 HTML 语法检查和 HTML 的“pretty printing(漂亮打印)”,但是对于你来说,它还允许你将一个 HTML 文件作为输入,然后将其转换成为 XML。JTidy 读取输入文件,然后如果发现有任何不匹配或遗漏的闭合标记,将纠正这些标记,最后输出一个格式良好的 XML 文档。 

从下面的示例代码中可以看到,JTidy 的用法相当简单。简单地将 JTidy 实例设置为输出 XML,提供一个输入 URL,输出文件和错误文件,然后启动转换过程就可以了。 

Java代码   收藏代码
  1. import java.net.URL;  
  2. import java.io.*;  
  3. import org.w3c.tidy.Tidy;  
  4.   
  5. public class TestHTML2XML {  
  6.     private String url;  
  7.     private String outFileName;  
  8.     private String errOutFileName;  
  9.   
  10.     public TestHTML2XML(String url, String outFileName, String errOutFileName) {  
  11.         this.url = url;  
  12.         this.outFileName = outFileName;  
  13.         this.errOutFileName = errOutFileName;  
  14.     }  
  15.   
  16.     public void convert() {  
  17.         URL u;  
  18.         BufferedInputStream in;  
  19.         FileOutputStream out;  
  20.   
  21.         Tidy tidy = new Tidy();  
  22.   
  23.         // Tell Tidy to convert HTML to XML  
  24.         tidy.setXmlOut(true);  
  25.   
  26.         try {  
  27.             // Set file for error messages  
  28.             tidy.setErrout(new PrintWriter(new FileWriter(errOutFileName), true));  
  29.             u = new URL(url);  
  30.   
  31.             // Create input and output streams  
  32.             in = new BufferedInputStream(u.openStream());  
  33.             out = new FileOutputStream(outFileName);  
  34.   
  35.             // Convert files  
  36.             tidy.parse(in, out);  
  37.   
  38.             // Clean up  
  39.             in.close();  
  40.             out.close();  
  41.   
  42.         } catch (IOException e) {  
  43.             System.out.println(this.toString() + e.toString());  
  44.         }  
  45.     }  
  46.   
  47.     public static void main(String[] args) {  
  48.         /* 
  49.          * Parameters are: URL of HTML file Filename of output file Filename of 
  50.          * error file 
  51.          */  
  52.         TestHTML2XML t = new TestHTML2XML("http://www.baidu.com",  
  53.                 "E:\\test.xml""E:\\error.xml");  
  54.         t.convert();  
  55.     }  
  56. }  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用开源的Java库iText来将HTML文件转换成PDF。具体实现步骤如下: 1. 首先,需要引入iText库。可以通过Maven或手动下载jar包的方式引入。 2. 使用iText中的PdfWriter类创建一个新的PDF文件。 ```java Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputFile)); document.open(); ``` 3. 使用iText中的XMLWorkerHelper类将HTML文件转换成PDF。 ```java // 读取HTML文件 String html = FileUtils.readFileToString(new File(htmlFile), "UTF-8"); // 创建字体 XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(); fontProvider.register("fonts/simhei.ttf"); // 将HTML转换成PDF XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(html.getBytes()), null, Charset.forName("UTF-8"), fontProvider); ``` 4. 最后,关闭文件流并保存PDF文件。 ```java document.close(); writer.close(); ``` 完整的代码示例: ```java import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerFontProvider; import com.itextpdf.tool.xml.XMLWorkerHelper; import org.apache.commons.io.FileUtils; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.nio.charset.Charset; public class HtmlToPdfConverter { public static void main(String[] args) throws Exception { String htmlFile = "input.html"; // HTML文件路径 String outputFile = "output.pdf"; // PDF文件路径 Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputFile)); document.open(); // 读取HTML文件 String html = FileUtils.readFileToString(new File(htmlFile), "UTF-8"); // 创建字体 XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(); fontProvider.register("fonts/simhei.ttf"); // 将HTML转换成PDF XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(html.getBytes()), null, Charset.forName("UTF-8"), fontProvider); document.close(); writer.close(); } } ``` 注意:在转换HTML文件时,需要注意HTML中的CSS样式和图片等外部资源的引用路径。同时,iText对HTML的解析有一定限制,不支持所有的HTML标签和CSS样式,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值