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();
        }
        
    }
}

 

 posted on 2017-11-16 15:09  【邵江】  阅读(1948)  评论(1编辑  收藏  举报