Java学习:使用DOM写XML - 绘制中国国旗的SVG文件
http://my.oschina.net/Tsybius2014/blog/543026
下面代码可以绘制出一个SVG格式的中华人民共和国国旗。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.FileNotFoundException;
import java.io.FileOutputStream;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
 
/**
 * 使用DOM绘制中国国旗的SVG文件
 * @author Tsybius2014
 * @date 2015年12月11日
 * @time 下午11:15:19
 * @remark
 *
 */
class XmlGenerateTest {
 
    /**
     * 使用DOM绘制中国国旗的SVG文件
     * @param args
     */
    public static void main(String[] args) {
 
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder();
            //生成SVG
            Document doc = builder.newDocument();
            String namespace = "http://www.w3.org/2000/svg";
            Element elementSvg = doc.createElementNS(namespace, "svg");
            elementSvg.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
            elementSvg.setAttribute("width", "900");
            elementSvg.setAttribute("height", "600");
            elementSvg.setAttribute("viewBox", "0 0 30 20");
            doc.appendChild(elementSvg);
            Element elementDef = doc.createElement("defs");
            elementSvg.appendChild(elementDef);
            Element elementPath = doc.createElement("path");
            elementPath.setAttribute("id", "s");
            elementPath.setAttribute("d", 
                "M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z");
            elementPath.setAttribute("fill", "#ffde00");
            elementDef.appendChild(elementPath);
            Element elementRect = doc.createElement("rect");
            elementRect.setAttribute("width", "30");
            elementRect.setAttribute("height", "20");
            elementRect.setAttribute("fill", "#de2910");
            elementSvg.appendChild(elementRect);
            Element elementUse1 = doc.createElement("use");
            elementUse1.setAttribute("xlink:href", "#s");
            elementUse1.setAttribute("transform", "translate(5,5) scale(3)");
            elementSvg.appendChild(elementUse1);
            Element elementUse2 = doc.createElement("use");
            elementUse2.setAttribute("xlink:href", "#s");
            elementUse2.setAttribute("transform", "translate(10,2) rotate(23.036243)");
            elementSvg.appendChild(elementUse2);
            Element elementUse3 = doc.createElement("use");
            elementUse3.setAttribute("xlink:href", "#s");
            elementUse3.setAttribute("transform", "translate(12,4) rotate(45.869898)");
            elementSvg.appendChild(elementUse3);
            Element elementUse4 = doc.createElement("use");
            elementUse4.setAttribute("xlink:href", "#s");
            elementUse4.setAttribute("transform", "translate(12,7) rotate(69.945396)");
            elementSvg.appendChild(elementUse4);
            Element elementUse5 = doc.createElement("use");
            elementUse5.setAttribute("xlink:href", "#s");
            elementUse5.setAttribute("transform", "translate(10,9) rotate(20.659808)");
            elementSvg.appendChild(elementUse5);
            //输出到文件
            File file = new File("C:\\Users\\Tsybius\\Desktop\\FlagOfPRC.svg");
            Transformer t = TransformerFactory.newInstance().newTransformer();
            t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(file)));
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}生成的XML内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" height="600" viewBox="0 0 30 20" width="900" xmlns="http://www.w3.org/2000/svg"><defs><path d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00" id="s"/></defs><rect fill="#de2910" height="20" width="30"/><use transform="translate(5,5) scale(3)" xlink:href="#s"/><use transform="translate(10,2) rotate(23.036243)" xlink:href="#s"/><use transform="translate(12,4) rotate(45.869898)" xlink:href="#s"/><use transform="translate(12,7) rotate(69.945396)" xlink:href="#s"/><use transform="translate(10,9) rotate(20.659808)" xlink:href="#s"/></svg>
经过格式化后的XML变为这样:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<svg xmlns:xlink="http://www.w3.org/1999/xlink" height="600" viewBox="0 0 30 20" width="900" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <path d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00" id="s" />
    </defs>
    <rect fill="#de2910" height="20" width="30" />
    <use transform="translate(5,5) scale(3)" xlink:href="#s" />
    <use transform="translate(10,2) rotate(23.036243)" xlink:href="#s" />
    <use transform="translate(12,4) rotate(45.869898)" xlink:href="#s" />
    <use transform="translate(12,7) rotate(69.945396)" xlink:href="#s" />
    <use transform="translate(10,9) rotate(20.659808)" xlink:href="#s" />
</svg>这个文件(FlagOfPRC.svg)使用IE8打开,效果如下:
相关推荐
  Yakamoz    2020-05-26  
   与卿画眉共浮生    2020-10-14  
   xiyang    2020-08-21  
   baijinswpu    2020-07-29  
   leonranri    2020-07-26  
   zhongliwen    2020-07-05  
   麋鹿麋鹿迷了路    2020-07-05  
   zengyu00    2020-07-05  
   XGQ    2020-07-04  
   CoderBoy    2020-06-28  
   whbing    2020-06-28  
   绝望的乐园    2020-06-27  
   wellfly    2020-06-26  
   菇星獨行    2020-06-25  
   草原孤狼    2020-06-25  
   坚持着执着    2020-06-16  
   wcqwcq    2020-06-14  
   yuanye0    2020-06-14  
   zhongliwen    2020-06-13  
 