XML文件生成

来源:互联网 发布:蚌埠市农村金融数据 编辑:程序博客网 时间:2024/06/05 00:50

XML文件生成方法

1.DOM和SAX(官方)
DOM生成XML文件(基于tree)
1.获取documentBuilder对象
2.获取Document对象
3.创建根节点
4.将子节点添加到DOM树中
5.创建TransformFactory对象
6.创建Transformer对象
7.将document对象(DOM树)转换为xml文件,并控制格式输出
SAX生成XML文件(基于事件)
1.生成一个SAXTransformerFactory类的对象
2.通过SAXTransformerFactory创建一个TransformerHandler的对象
3.通过TransformerHandler对象创建一个Transformer对象
4.通过transformer对象,对XML文件进行设置,如:setProperty,设置编码和换行
5.创建一个result对象,进行文件创建和文件输出流的编写(属性设置之后,document打开之前)
6.使result和TransformerHandler关联
7.利用TransformerHandler对象对XML文件进行编写
8.打开document
9.循环生成book节点和book下的子节点
10.关闭document
2.DOM4J和JDOM(生成全新形式的文件-RSS)
DOM4J生成XML文件(基于底层API)
1.创建document对象,代表整个XML文档
2.创建根节点rss
3.向rss节点中添加version属性
4.向rss节点中添加节点和节点内容
5.设置XML文件格式,和编码字符集
6.内容中处理转义字符(生成的文本不会自动转义)
7.控制台输出XML文件内容
8.生成XML文件
JDOM生成XML文件(基于底层API)
1.生成一个根节点
2.为节点添加属性
3.生成一个document对象
4.向节点中添加内容
5.创建一个XMLOutputter对象
6.利用output将document对象转换为XML文件
区别:
DOM生成的树驻留在内存中(倒树模型-根-》叶)
方便后序改动,修改删除
SAX生成的树不驻留在内存中,一步一步生成
不可以走回头路,SAX性能高,后面不可改动
性能测试:(生成XML时间)
按照生成XML时间排序:
DOM > JDOM > DOM4J > SAX
性能依次提升。

Code-1:DOM创建XML文件package com.xml;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;public class DOMCreateXML {    /**     * 创建XML文件     * @param args     */    public DocumentBuilder getDocumentBuilder(){        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder db = null;        try {            db = dbf.newDocumentBuilder();        } catch (ParserConfigurationException e) {            e.printStackTrace();        }        return db;    }    public void createXML(){        DocumentBuilder db = getDocumentBuilder();        Document doc= db.newDocument();        doc.setXmlStandalone(true);        //创建根节点        Element bookstore = doc.createElement("bookstore");        //向bookstore中添加节点        Element book = doc.createElement("book");        Element name = doc.createElement("name");        name.setTextContent("小王子");        book.setAttribute("id", "001");        bookstore.appendChild(book);        book.appendChild(name);        //将bookstore()添加到document树中        doc.appendChild(bookstore);        //创建树之后将树DOM转换为XML文件        TransformerFactory tff = TransformerFactory.newInstance();        try {            Transformer tf = tff.newTransformer();            //进行合理换行(键值对(属性名和属性值))            tf.setOutputProperty(OutputKeys.INDENT, "yes");            tf.transform(new DOMSource(doc), new StreamResult(new File("src/e.xml")));        } catch (TransformerConfigurationException e) {            e.printStackTrace();        } catch (TransformerException e) {            e.printStackTrace();        }    }    /**     * 主程序     * @param args     */    public static void main(String[] args) {        DOMCreateXML c = new DOMCreateXML();        c.createXML();    }}Code-2:SAX创建XML文件package com.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;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 SAXCreateXML {    /**     * SAX方式生成XML文件     *      * @param args     */    // 利用一个XML文件解析的结果生成一个XML文件    public ArrayList<Book> parseXML() {        // 1首先获取一个SAXFactory的实例factory        SAXParserFactory factory = SAXParserFactory.newInstance();        // 2通过factory获取SAXParser的实例        // 2创建一个SAXParseHandler的实例        SAXParseHandler phandler = new SAXParseHandler();        try {            SAXParser parser = factory.newSAXParser();            parser.parse("books.xml", phandler);        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (SAXException e) {            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        ArrayList booklist = phandler.getBooklist();        return booklist;    }    public void createXML() {        ArrayList<Book> booklist = parseXML();        // 生成一个XML文件        // 1.生成一个SAXTransformerFactory类的对象,        SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();        try {            // 2.通过SAXTransformerFactory创建一个TransformerHandler的对象            TransformerHandler tfh = tff.newTransformerHandler();            // 3.通过TransformerHandler对象创建一个Transformer对象            Transformer tf = tfh.getTransformer();            // 4.通过transformer对象,对XML文件进行设置,如:setProperty,设置编码和换行,在setResult之前写            tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");            tf.setOutputProperty(OutputKeys.INDENT, "yes");            // 5.创建一个result对象,进行文件创建和文件输出流的编写            File f = new File("src/newbooks.xml");            if (!f.exists()) {                f.createNewFile();            }            Result result = new StreamResult(new FileOutputStream(f));            // 6.使result和TransformerHandler关联            tfh.setResult(result);            // 7.利用handler对象对XML文件进行编写            // 8.打开document            tfh.startDocument();            // AttributesImpl attr = new AttributesImpl();            // tfh.startElement("", "", "bookstore", attr);            // attr.clear();            // tfh.startElement("", "", "book", attr);            // attr.addAttribute("", "", "id", "", "001");            // tfh.endElement("", "", "book");            // tfh.endElement("", "", "bookstore");            // 循环生成book节点            AttributesImpl attr = new AttributesImpl();            tfh.startElement("", "", "bookstore", attr);            for (Book book : booklist) {                attr.clear();                attr.addAttribute("", "", "id", "", book.getId());                tfh.startElement("", "", "book", attr);                //创建name节点                if(book.getName()!=null && !book.getName().trim().equals("")){                    attr.clear();                    tfh.startElement("", "", "name", attr);                    tfh.characters(book.getName().toCharArray(), 0, book.getName().length());                    tfh.endElement("", "", "name");                }                //创建year节点                if(book.getYear()!=null && !book.getYear().trim().equals("")){                    attr.clear();                    tfh.startElement("", "", "year", attr);                    tfh.characters(book.getYear().toCharArray(), 0, book.getYear().length());                    tfh.endElement("", "", "year");                }                //创建author节点                if(book.getAuthor()!=null && !book.getAuthor().trim().equals("")){                    attr.clear();                    tfh.startElement("", "", "author", attr);                    tfh.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());                    tfh.endElement("", "", "author");                }                //创建price节点                if(book.getPrice()!=null && !book.getPrice().trim().equals("")){                    attr.clear();                    tfh.startElement("", "", "price", attr);                    tfh.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());                    tfh.endElement("", "", "price");                }                //创建language节点                if(book.getLanguage()!=null && !book.getLanguage().trim().equals("")){                    attr.clear();                    tfh.startElement("", "", "language", attr);                    tfh.characters(book.getLanguage().toCharArray(), 0, book.getLanguage().length());                    tfh.endElement("", "", "language");                }                tfh.endElement("", "", "book");            }            tfh.endElement("", "", "bookstore");            // 9.关闭document            tfh.endDocument();        } catch (TransformerConfigurationException e) {            e.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static void main(String[] args) {        SAXCreateXML c = new SAXCreateXML();        c.createXML();    }}Code-3:DOM4J创建XML文件package com.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class DOM4JRSS {    /**     * DOM4J生成RSS文件     * @param args     */    public void createXML(){        //1.创建document对象,代表整个XML文档        Document doc = DocumentHelper.createDocument();        //2.创建根节点rss        Element rss = doc.addElement("rss");        //3.向rss节点中添加version属性        rss.addAttribute("version", "2.0");        //4.向rss节点中添加节点和节点内容        Element chanel = rss.addElement("chanel");        Element title = chanel.addElement("title");        title.setText("<娱乐消息>");        //生成XML文件        //控制台输出XML文件内容        //设置XML文件格式,和编码字符集        OutputFormat format = OutputFormat.createPrettyPrint();        format.setEncoding("GBK");        XMLWriter writer = null;        try {            writer = new XMLWriter(format);            //5.内容中处理转义字符(生成的文本不会自动转义)            //默认值为TRUE--转义            writer.setEscapeText(false);        } catch (UnsupportedEncodingException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        try {            writer.write(doc);            writer.close();        } catch (IOException e) {            e.printStackTrace();        }        //生成XML文件        File f = new File("rss.xml");        try {            XMLWriter writeXMl = new XMLWriter(new FileOutputStream(f), format);            writeXMl.write(doc);            writeXMl.close();        } catch (IOException e) {            e.printStackTrace();        }     }    public static void main(String[] args) {        DOM4JRSS dom = new DOM4JRSS();        dom.createXML();    }}Code-4:JDOM生成XML文件package com.xml;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.output.Format;import org.jdom2.output.XMLOutputter;public class JDOMXML {    public void createXML(){        //1.生成一个根节点        Element rss = new Element("rss");        //2.为节点添加属性        rss.setAttribute("version","2.0");        //3.生成一个document对象        Document doc = new Document(rss);        //4.向节点中添加内容        Element chanel = new Element("chanel");        rss.addContent(chanel);        Element title = new Element("title");        title.setText("<娱乐新闻>");        chanel.addContent(title);        //4.创建一个XMLOutputter对象        Format format = Format.getCompactFormat();        format.setIndent("");        format.setEncoding("GBK");        format.setEscapeStrategy(null);        XMLOutputter output = new XMLOutputter(format);        //5.利用output将document对象转换为XML文件        try {            output.output(doc, new FileOutputStream(new File("rssnew.xml")));        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        JDOMXML c = new JDOMXML();        c.createXML();    }}