基于文档在内存中初步创建的模板和其他方法可能会对生成的文档大小施加一定的限制。
与此同时,一个非常简单和可靠的写上即时的方法来创建纯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