本文是我在学习《Java核心技术》第九版卷II(高级特性)时写的一段代码。原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏、王浩、姚建平等。我的Java版本为1.8
之前写过一个Blog,使用DOM写XML绘制中国国旗:
下面代码也可以绘制出一个SVG格式的中华人民共和国国旗,但使用的是StAX。
SVG文件参考了维基百科上的中国国旗SVG文件。
(https://zh.wikipedia.org/wiki/中华人民共和国国旗#/media/File:Flag_of_the_People's_Republic_of_China.svg)
Java代码如下:
package XmlGenerateTest;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.nio.file.Files;import javax.xml.stream.XMLOutputFactory;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamWriter;/** * 使用StAX绘制中国国旗的SVG文件 * @author Tsybius2014 * @date 2015年12月13日 * @time 下午7:27:11 * @remark * */class XmlGenerateTest { /** * 使用StAX绘制中国国旗的SVG文件 * * @param args */ public static void main(String[] args) { try { File file = new File("C:\\Users\\Tsybius\\Desktop\\FlagOfPRC.svg"); OutputStream out = Files.newOutputStream(file.toPath()); XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLStreamWriter writer = factory.createXMLStreamWriter(out); writer.writeStartDocument(); writer.writeStartElement("svg"); writer.writeAttribute("xmlns", "http://www.w3.org/2000/svg"); // svg writer.writeAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); // svg writer.writeAttribute("width", "900"); // svg writer.writeAttribute("height", "600"); // svg writer.writeAttribute("viewBox", "0 0 30 20"); // svg writer.writeStartElement("defs"); writer.writeStartElement("path"); writer.writeAttribute("id", "s"); // path writer.writeAttribute("d", "M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z"); writer.writeAttribute("fill", "#ffde00"); // path writer.writeEndElement(); // End of path writer.writeEndElement(); // End of defs writer.writeStartElement("rect"); writer.writeAttribute("width", "30"); // rect writer.writeAttribute("height", "20"); // rect writer.writeAttribute("fill", "#de2910"); // rect writer.writeEndElement(); // End of rect writer.writeStartElement("use"); writer.writeAttribute("xlink:href", "#s"); // use1 writer.writeAttribute("transform", "translate(5,5) scale(3)"); // use1 writer.writeEndElement(); // End of use1 writer.writeStartElement("use"); writer.writeAttribute("xlink:href", "#s"); // use2 writer.writeAttribute("transform", "translate(10,2) rotate(23.036243)"); // use2 writer.writeEndElement(); // End of use2 writer.writeStartElement("use"); writer.writeAttribute("xlink:href", "#s"); // use3 writer.writeAttribute("transform", "translate(12,4) rotate(45.869898)"); // use3 writer.writeEndElement(); // End of use3 writer.writeStartElement("use"); writer.writeAttribute("xlink:href", "#s"); // use4 writer.writeAttribute("transform", "translate(12,7) rotate(69.945396)"); // use4 writer.writeEndElement(); // End of use4 writer.writeStartElement("use"); writer.writeAttribute("xlink:href", "#s"); // use5 writer.writeAttribute("transform", "translate(10,9) rotate(20.659808)"); // use5 writer.writeEndElement(); // End of use5 writer.writeEndElement(); // End of svg writer.writeEndDocument(); writer.close(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XMLStreamException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("END"); }}
生成的SVG文件FlagOfPRC.svg,经格式化后如下:
(注:XML在线格式化可使用此工具: )
使用Firefox打开此文件效果如下:
END