明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

將 HTML 文件轉(zhuǎn)換成 XML

[摘要]在 Java 專家 Michael Geisler 為 Builder 澳大利亞寫的第一篇文章中,他向讀者展示了如何使用 JTidy 將 HTML 文件轉(zhuǎn)換成 XML。有關(guān) Java 的最重要的事情是有很多擴(kuò)展標(biāo)準(zhǔn)庫(kù)可以作為標(biāo)準(zhǔn)平臺(tái)的一部分,而且在那些庫(kù)中有對(duì) XML 提供了非常多的支持。然而對(duì)于...
在 Java 專家 Michael Geisler 為 Builder 澳大利亞寫的第一篇文章中,他向讀者展示了如何使用 JTidy 將 HTML 文件轉(zhuǎn)換成 XML。

有關(guān) Java 的最重要的事情是有很多擴(kuò)展標(biāo)準(zhǔn)庫(kù)可以作為標(biāo)準(zhǔn)平臺(tái)的一部分,而且在那些庫(kù)中有對(duì) XML 提供了非常多的支持。然而對(duì)于某些特定的需要,在標(biāo)準(zhǔn)庫(kù)中可能沒有直接的支持。



其實(shí)你有兩個(gè)選擇:

完全由自己來構(gòu)建一些東西。這一般很痛苦,而且很費(fèi)時(shí)間。
去“社區(qū)”看看是否已經(jīng)有人遇到了同樣的問題(這種情況非常有可能發(fā)生),看他是否樂意與你分享他的成果。
對(duì)于這個(gè)情況,SourceForge 上有一個(gè)非常有用的小項(xiàng)目,叫做 JTidy。JTidy 的Web 站點(diǎn)位于 http://sourceforge.net/projects/jtidy/。

JTidy 提供 HTML 語法檢查和 HTML 的“pretty printing(漂亮打印)”,但是對(duì)于你來說,它還允許你將一個(gè) HTML 文件作為輸入,然后將其轉(zhuǎn)換成為 XML。JTidy 讀取輸入文件,然后如果發(fā)現(xiàn)有任何不匹配或遺漏的閉合標(biāo)記,將糾正這些標(biāo)記,最后輸出一個(gè)格式良好的 XML 文檔。

從下面的示例代碼中可以看到,JTidy 的用法相當(dāng)簡(jiǎn)單。簡(jiǎn)單地將 JTidy 實(shí)例設(shè)置為輸出 XML,提供一個(gè)輸入 URL,輸出文件和錯(cuò)誤文件,然后啟動(dòng)轉(zhuǎn)換過程就可以了。

import java.net.URL;
import java.io.*;
import org.w3c.tidy.Tidy;

public class TestHTML2XML {
private String url;
private String outFileName;
private String errOutFileName;

public TestHTML2XML(String url, String outFileName, String
errOutFileName) {
this.url = url;
this.outFileName = outFileName;
this.errOutFileName = errOutFileName;
}

public void convert() {
URL u;
BufferedInputStream in;
FileOutputStream out;

Tidy tidy = new Tidy();

//Tell Tidy to convert HTML to XML
tidy.setXmlOut(true);

try {
//Set file for error messages
tidy.setErrout(new PrintWriter(new FileWriter(errOutFileName), true));
u = new URL(url);

//Create input and output streams
in = new BufferedInputStream(u.openStream());
out = new FileOutputStream(outFileName);

//Convert files
tidy.parse(in, out);

//Clean up
in.close();
out.close();

} catch (IOException e) {
System.out.println(this.toString() + e.toString());
}
}

public static void main(String[] args) {
/*
* Parameters are:
* URL of HTML file
* Filename of output file
* Filename of error file
*/
TestHTML2XML t = new TestHTML2XML(args[0], args[1], args[2]);
t.convert();
}
}