Java学习:使用StAX写XML - 绘制中国国旗的SVG文件

2023-11-10 01:40

本文主要是介绍Java学习:使用StAX写XML - 绘制中国国旗的SVG文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文是我在学习《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打开此文件效果如下:

205258_IK35_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/543538

这篇关于Java学习:使用StAX写XML - 绘制中国国旗的SVG文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379669

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu