zoukankan      html  css  js  c++  java
  • Java——SAX生成XML文件

    SAX生成XML文件 

    准备工作

    创建一个SAXTransformerFactory 类对象

    //创建一个 SAXTransformerFactory 类对象
    SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();

    通过SAXTransformerFactory 对象创建一个 Transformer 对象

    //通过 SAXTransformerFactory 对象创建一个 TransformerHandler 对象
    TransformerHandler handler = tff.newTransformerHandler();

    设置 xml 文件编码格式和自动换行

    //设置生成的 XML 文件编码格式
    tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
    //设置生成的 XML 文件自动换行
    tr.setOutputProperty(OutputKeys.INDENT, "yes");

     判断生成的 xml 文件 是否存在,不存在就创建一个新的

    //如果不存在,就创建一个新的 XML 文件
    File file = new File("newSchool.xml");
    if (!file.exists()) {
        file.createNewFile();
    }

    创建一个 Result 对象,并且使其与 TransformerHandler对象关联

    //创建一个Result 对象,并且使其与 TransformerHandler 对象关联
    Result result = new StreamResult(new FileOutputStream(file));
    handler.setResult(result);

    利用 handler 对象进行 xml 文件内容的编写

    打开 document

    //打开 document
    handler.startDocument();

    生成根节点标签

    AttributesImpl atts = new AttributesImpl();
    //根节点开始标签
    handler.startElement("", "", "School", atts);

    设置字节点的属性和属性值 并创建子节点的开始标签

    //设置属性和属性值
    atts.addAttribute("", "", "id", "", "1");
    //子节点开始标签
    handler.startElement("", "", "student", atts);

    创建子节点下的 name 节点并给其添加内容

    atts.clear();  //清空子节点设的值
    //字节点下name节点开始标签
    handler.startElement("", "", "name", atts);
    String name="小王";
    handler.characters(name.toCharArray(), 0, name.length());
    //字节点下name节点结束标签
    handler.endElement("", "", "name");

    有开始就结束,在 XML 当中标签都是成对出现的,下面就是结束标签,以及关闭 document对象

    //子节点结束标签
    handler.endElement("", "", "student");
                
    //根节点结束标签
    handler.endElement("", "", "School");
                
    //关闭 document
    handler.endDocument();

    运行结果:

    <?xml version="1.0" encoding="utf-8"?><School>
    <student id="1">
    <name>小王</name>
    </student>
    </School>

    完整代码:

    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Result;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.sax.SAXTransformerFactory;
    import javax.xml.transform.sax.TransformerHandler;
    import javax.xml.transform.stream.StreamResult;
    
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.AttributesImpl;
    
    public class CreateXMLBySAX {
    
        public static void main(String[] args) {
            
            //创建一个 SAXTransformerFactory 类对象
            SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
        
            try {
                //通过 SAXTransformerFactory 对象创建一个 TransformerHandler 对象
                TransformerHandler handler = tff.newTransformerHandler();
                //通过 TransformerHandler 对象创建一个 Transformer 对象
                Transformer tr = handler.getTransformer();
                //设置生成的 XML 文件编码格式
                tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
                //设置生成的 XML 文件自动换行
                tr.setOutputProperty(OutputKeys.INDENT, "yes");
                //如果不存在,就创建一个新的 XML 文件
                File file = new File("newSchool.xml");
                if (!file.exists()) {
                    file.createNewFile();
                }
                //创建一个Result 对象,并且使其与 TransformerHandler 对象关联
                Result result = new StreamResult(new FileOutputStream(file));
                handler.setResult(result);
                
                //利用 handler 对象进行 XML 文件内容的编写
                //打开 document
                handler.startDocument();
                //为了创建节点属性和属性值
                AttributesImpl atts = new AttributesImpl();
                //根节点开始标签
                handler.startElement("", "", "School", atts);
                //atts.clear();  //清空 atts 的值
                //设置属性和属性值
                atts.addAttribute("", "", "id", "", "1");
                //子节点开始标签
                handler.startElement("", "", "student", atts);
                
                atts.clear();  //清空子节点设的值
                //字节点下name节点开始标签
                handler.startElement("", "", "name", atts);
                String name="小王";
                handler.characters(name.toCharArray(), 0, name.length());
                //字节点下name节点结束标签
                handler.endElement("", "", "name");
                //子节点结束标签
                handler.endElement("", "", "student");
                
                //根节点结束标签
                handler.endElement("", "", "School");
                
                //关闭 document
                handler.endDocument();
                
            } catch (TransformerConfigurationException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            }
            
        }
    }
  • 相关阅读:
    nodejs第二天之Buffer类
    2019-2020-1 20175334 20175322 20175315 实验四 《外设驱动程序设计》实验报告
    2019-2020-1 20175315 20175322 20175334 实验三 实时系统
    2019-2020-2-20175315 20175322 20175334-实验二固件程序设计
    2019-2020-1 实验一 开发环境的熟悉
    2018-2019-20175315 实验五《网络编程与安全》实验报告
    实验四《Android程序设计》
    20175315Mycp
    20175315 实验二《Java面向对象程序设计》实验报告
    《Java程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/szj-ang/p/7492618.html
Copyright © 2011-2022 走看看