基於文檔在內存中初步創建的模板和其他方法可能會對生成的文檔大小施加一定的限制。
與此同時,一個非常簡單和可靠的寫上即時的方法來創建純HTML的存在的基礎上,SAX處理程序和默認XSLT轉換器,HTML輸出的後者有內在能力:
String encoding = "UTF-8";
FileOutputStream fos = new FileOutputStream("myfile.html");
OutputStreamWriter writer = new OutputStreamWriter(fos, encoding);
StreamResult streamResult = new StreamResult(writer);
SAXTransformerFactory saxFactory =
(SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler tHandler = saxFactory.newTransformerHandler();
tHandler.setResult(streamResult);
Transformer transformer = tHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "html");
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
writer.write("<!DOCTYPE html>\n");
writer.flush();
tHandler.startDocument();
tHandler.startElement("", "", "html", new AttributesImpl());
tHandler.startElement("", "", "head", new AttributesImpl());
tHandler.startElement("", "", "title", new AttributesImpl());
tHandler.characters("Hello".toCharArray(), 0, 5);
tHandler.endElement("", "", "title");
tHandler.endElement("", "", "head");
tHandler.startElement("", "", "body", new AttributesImpl());
tHandler.startElement("", "", "p", new AttributesImpl());
tHandler.characters("5 > 3".toCharArray(), 0, 5); // note '>' character
tHandler.endElement("", "", "p");
tHandler.endElement("", "", "body");
tHandler.endElement("", "", "html");
tHandler.endDocument();
writer.close();
請注意,XSLT轉換器將免除您擺脫特殊字符(如>
)的負擔,因爲它本身需要處理它。
它是容易將保鮮膜SAX方法,如startElement()
和characters()
到一個人的口味的東西更方便......
一個不錯的主意和一個不錯的工具,但不幸的是,許可證不是很好,所以鼓勵真正廣泛的使用...;) – 2017-03-17 02:02:53
@ s-n-ushakov對不起,我不是關於許可協議的專家。 GPL v3.0有什麼問題? – 2017-03-17 10:39:20
GPL的問題在於它太嚴格了。如果您只使用任何GPL授權代碼,它都需要您透露GPL下的所有項目。這對愛好或大學編程可能沒有問題,但對於與業務相關的編程而言,這可能是一個相當大的問題。爲了讓您的圖書館更加適合商業用途,我可能會建議將許可證至少更改爲LGPL,而不要求您開放所有項目,但只需要向圖書館透露您的改進。其他許可證,也許稍微有點商業友好,是BSD,麻省理工學院,阿帕奇,Eclipse ... – 2017-03-18 05:17:37