Java学习:使用StAX写XML - 绘制中国国旗的SVG文件
2019独角兽企业重金招聘Python工程师标准>>>
本文是我在学习《Java核心技术》第九版卷II(高级特性)时写的一段代码。原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏、王浩、姚建平等。我的Java版本为1.8
之前写过一个Blog,使用DOM写XML绘制中国国旗:
http://my.oschina.net/Tsybius2014/blog/543026
下面代码也可以绘制出一个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"); // svgwriter.writeAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); // svgwriter.writeAttribute("width", "900"); // svgwriter.writeAttribute("height", "600"); // svgwriter.writeAttribute("viewBox", "0 0 30 20"); // svgwriter.writeStartElement("defs");writer.writeStartElement("path");writer.writeAttribute("id", "s"); // pathwriter.writeAttribute("d","M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z");writer.writeAttribute("fill", "#ffde00"); // pathwriter.writeEndElement(); // End of pathwriter.writeEndElement(); // End of defswriter.writeStartElement("rect");writer.writeAttribute("width", "30"); // rectwriter.writeAttribute("height", "20"); // rectwriter.writeAttribute("fill", "#de2910"); // rectwriter.writeEndElement(); // End of rectwriter.writeStartElement("use");writer.writeAttribute("xlink:href", "#s"); // use1writer.writeAttribute("transform", "translate(5,5) scale(3)"); // use1writer.writeEndElement(); // End of use1writer.writeStartElement("use");writer.writeAttribute("xlink:href", "#s"); // use2writer.writeAttribute("transform","translate(10,2) rotate(23.036243)"); // use2writer.writeEndElement(); // End of use2writer.writeStartElement("use");writer.writeAttribute("xlink:href", "#s"); // use3writer.writeAttribute("transform","translate(12,4) rotate(45.869898)"); // use3writer.writeEndElement(); // End of use3writer.writeStartElement("use");writer.writeAttribute("xlink:href", "#s"); // use4writer.writeAttribute("transform","translate(12,7) rotate(69.945396)"); // use4writer.writeEndElement(); // End of use4writer.writeStartElement("use");writer.writeAttribute("xlink:href", "#s"); // use5writer.writeAttribute("transform","translate(10,9) rotate(20.659808)"); // use5writer.writeEndElement(); // End of use5writer.writeEndElement(); // End of svgwriter.writeEndDocument();writer.close();out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XMLStreamException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("END");}
}
生成的SVG文件FlagOfPRC.svg,经格式化后如下:
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="900" height="600" viewBox="0 0 30 20"><defs><path id="s" d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00"/></defs><rect width="30" height="20" fill="#de2910"/><use xlink:href="#s" transform="translate(5,5) scale(3)"/><use xlink:href="#s" transform="translate(10,2) rotate(23.036243)"/><use xlink:href="#s" transform="translate(12,4) rotate(45.869898)"/><use xlink:href="#s" transform="translate(12,7) rotate(69.945396)"/><use xlink:href="#s" transform="translate(10,9) rotate(20.659808)"/>
</svg>
(注:XML在线格式化可使用此工具: http://tool.oschina.net/codeformat/xml )
使用Firefox打开此文件效果如下:
END
转载于:https://my.oschina.net/Tsybius2014/blog/543538
Java学习:使用StAX写XML - 绘制中国国旗的SVG文件相关推荐
- canvas绘制中国国旗!
绘制中国国旗 1.题目 今天刚学了H5中的画布canvas元素,课堂上的案例挺有意思,就心血来潮想利用canvas绘制中国国旗: 2.思路 第一步,创建画布元素,在画布内作好辅助线和网格线来确定圆的位 ...
- 绘制中国国旗(1)(嵌入式基础)
一.中国国旗的简介 国旗的形状. 颜色两面相同,旗五星两面相对.为便利计,本件仅以旗杆在左之一面为说明之标准. 对于旗杆在右之一面,凡本件所称左均应改右,所称右均应改左. 国旗的形状. 颜 ...
- 学习路之gis--如何获取中国地图的shp文件(含省级
1.下载地图json文件 网址:DataV.GeoAtlas地理小工具系列 http://datav.aliyun.com/tools/atlas/index.html 2.点击下载文件 也可以用ge ...
- Java学习day015 如何写伪代码
day015 如何写伪代码 在学习的过程中老师要求我们在写程序之前先写伪代码,一开始我是拒绝的但奈何没有用,小的程序直接都写出来了再返回写伪代码有点烦,但是一想如果程序大一点复杂一点如何下手都是问题 ...
- Java学习之仿写Tomcat
一.原理讲解 OSI七层模型 如何调动后四层协议 先仿写一个socket服务端和客户端接发数据的demo /*** 服务器端*/ public class ServerA {//main方法是主线程要 ...
- eclipse : java项目中的web.xml( Deployment Descriptor 部署描述文件 )配置说明
context-param.listener.filter.servlet 首先可以肯定的是,加载顺序与它们在 web.xml 配置文件中的先后顺序无关.即不会因为 filter 写在 listen ...
- Python用海龟绘制中国国旗
本人是个大二学生嘛,最近对python比较感兴趣,还没正式入门,只能稍微写点较为简单的代码,当然,自己写的国旗代码也比较繁琐基础,话不多说,上代码,还望大佬们指正! # 首先绘制国旗的矩形框架 fro ...
- java学习笔记(2):获取文件名和自定义文件过滤器
//自定义文件过滤器import java.io.File;import javax.swing.filechooser.*;public class JavaChooser extends File ...
- vue中使用echarts绘制中国地图
首先需要一个绘制中国地图的json文件(资源还在审核,审核过后会重新贴上来) 1.首先引入echarts和json文件,在需要的地方引即可 import echarts from 'echarts'; ...
- 用记事本写xml文档
用记事本写xml文档时要注意文件的编码格式: 一般记事本默认编码:ANSI 假如 用记事编写后缀名为xml的文档 文件内容如下: <?xml version="1.0" en ...
最新文章
- 贪心 ---- Educational Codeforces Round 90 (Rated for Div. 2)E. Sum of Digits[数位贡献+思维题+贪心]
- 第十六届智能车竞赛安徽赛区成绩与奖项公示
- django-request对象
- 深入理解z-index
- mysql 自定义抛出异常_C#自定义异常(throw抛出异常)
- 汇编中类似数组的寻址方式
- break和continue关键字
- FTP命令:下载,上传FTP服务器中的文件
- Spring MVC类型转换的意义
- 详细讲解怎样做数据仓库需求分析
- c++ PP第十一章最后一题
- 神经网络学习小记录59——Pytorch搭建常见分类网络平台(VGG16、MobileNetV2、ResNet50)
- 浏览器iframe跨域
- awl伪装MAC地址进行多线程SYN攻击
- NeurIPS 2019 | DetNAS:首个搜索物体检测Backbone的方法
- wx python 基本控件
- win7系统安装信息服务器不可用怎么办,Win7电脑RPC服务器不可用怎么办 RPC服务器不可用解决方法...
- 为网页添加列表和超链接——精美电商悬浮窗
- 自考深圳大学计算机专业难吗,深圳大学自考难吗
- IIS上asp.net网站无法访问