8月20号 XML写入

来源:互联网 发布:苏州德威国际学校 知乎 编辑:程序博客网 时间:2024/06/05 14:35
对应XML的读取,XML的写入也有4中方式:
DOM写入:
    public class CreateXML {        public DocumentBuilder getDocumentBuilder(){            // 创建一个DocumentBuilderFactory的对象            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();            // 创建DocumentBuilder对象            DocumentBuilder db =null;            try {                db = dbf.newDocumentBuilder();            } catch (ParserConfigurationException e) {                e.printStackTrace();            }            return db;        }        public void createXML(){            DocumentBuilder db = getDocumentBuilder();            Document document = db.newDocument();            //设置Standalone="yes",不设置为no表示xml包含dtd和schema的相关资料            document.setXmlStandalone(true);            Element bookstore = document.createElement_x("bookStore");            //向bookstore根节点中添加子节点book            Element book = document.createElement_x("book");            Element name = document.createElement_x("name");            //name.setNodeValue("小王子");            name.setTextContent("小王子");            book.appendChild(name);            book.setAttribute("id", "1");            //将book节点添加到bookstore根节点中            bookstore.appendChild(book);            //将bookstore节点(已经包含了book)添加到dom树中            document.appendChild(bookstore);            //创建TransformerFactory对象            TransformerFactory tff = TransformerFactory.newInstance();            try {                //创建Transformer对象                Transformer tf = tff.newTransformer();                //设置自动换行                tf.setOutputProperty(OutputKeys.INDENT, "yes");                tf.transform(new DOMSource(document),new StreamResult(new File("books1.xml")));            } catch (TransformerConfigurationException e) {                e.printStackTrace();            } catch (TransformerException e) {                e.printStackTrace();            }        }        public static void main(String[] args) {            CreateXML creatXml = new CreateXML();            creatXml.createXML();        }


会生成一个名为books1.xml的文件,文件内容:
<?xml version="1.0" encoding="UTF-8"?><bookStore>    <book id="1">        <name>小王子</name>    </book></bookStore>

SAX生成XML文件:

public class SAXTestCreate {        public void createXML() {            Book b1 = new Book();            b1.setId("1");            b1.setName("冰与火之歌");            b1.setAuthor("乔治马丁");            b1.setYear("2014");            b1.setPrice("89");            Book b2 = new Book();            b2.setId("2");            b2.setName("安徒生童话");            b2.setAuthor("乔治马丁");            b2.setYear("2004");            b2.setPrice("77");            b2.setLanguage("English");            ArrayList bookList = new ArrayList();            bookList.add(b1);            bookList.add(b2);            // 生成xml            // 1.创建一个TransformerFactory类的对象            SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory                    .newInstance();            try {                // 2.通过SAXTransformerFactory对象创建一个TransformerHandler对象                TransformerHandler handler = tff.newTransformerHandler();                // 3.通过handler对象创建一个Transformer对象                Transformer tr = handler.getTransformer();                //// 4.通过Transformer对象对生成的xml文件进行设置                //// 设置xml的编码                tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");                //// 设置xml的“是否换行”                tr.setOutputProperty(OutputKeys.INDENT, "yes");                // 5.创建一个Result对象                File f = new File("src/res/newbooks.xml");                if (!f.exists()) {                    f.createNewFile();                }                // 6.创建Result对象,并且使其与handler关联                Result result = new StreamResult(new FileOutputStream(f));                handler.setResult(result);                // 7.利用handler对象进行xml文件内容的编写O                // 打开document                handler.startDocument();                AttributesImpl attr = new AttributesImpl();                handler.startElement("", "", "bookstore", attr);                for (Book book : bookList) {                    attr.clear();                    attr.addAttribute("", "", "id", "", book.getId());                    handler.startElement("", "", "book", attr);                    // 创建name节点                    if (book.getName() != null && !book.getName().trim().equals("")) {                        attr.clear();                        handler.startElement("", "", "name", attr);                        handler.characters(book.getName().toCharArray(), 0, book                                .getName().length());                        handler.endElement("", "", "name");                    }                    // 创建year节点                    if (book.getYear() != null && !book.getYear().trim().equals("")) {                        attr.clear();                        handler.startElement("", "", "year", attr);                        handler.characters(book.getYear().toCharArray(), 0, book                                .getYear().length());                        handler.endElement("", "", "year");                    }                    // 创建author节点                    if (book.getAuthor() != null && !book.getAuthor().trim().equals("")) {                        attr.clear();                        handler.startElement("", "", "author", attr);                        handler.characters(book.getAuthor().toCharArray(), 0, book                                .getAuthor().length());                        handler.endElement("", "", "author");                    }                    // 创建price节点                    if (book.getPrice() != null && !book.getPrice().trim().equals("")) {                        attr.clear();                        handler.startElement("", "", "price", attr);                        handler.characters(book.getPrice().toCharArray(), 0, book                                .getPrice().length());                        handler.endElement("", "", "price");                    }                    // 创建language节点                    if (book.getLanguage() != null && !book.getLanguage().trim().equals("")) {                        attr.clear();                        handler.startElement("", "", "language", attr);                        handler.characters(book.getLanguage().toCharArray(), 0, book                                .getLanguage().length());                        handler.endElement("", "", "language");                    }                    handler.endElement("", "", "book");                }                handler.endElement("", "", "bookstore");                // 关闭document                handler.endDocument();            } catch (TransformerConfigurationException e) {                e.printStackTrace();            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            } catch (SAXException e) {                e.printStackTrace();            }        }        public static void main(String[] args) {            SAXTestCreate test = new SAXTestCreate();            test.createXML();        }    }


生成newbooks.xml文件,与之前的读入时的xml文件一样
什么是RSS
简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。
RSS文件中会多出一个rss标签。

DOM4J生成rss文件

public class DOM4JTest {        private void createXML() {            //1.创建document对象,代表整个xml文档            Document document = DocumentHelper.createDocument();            //2.创建根节点rss            Element rss = document.addElement("rss");            //3.向rss节点中添加version属性            rss.addAttribute("version", "2.0");            //4.生成子节点及节点内容            Element channel = rss.addElement("channel");            Element title = channel.addElement("title");            title.setText("上海移动互联网产业促进中心正式揭牌 ");            //5.设置生成xml的格式            OutputFormat format = OutputFormat.createPrettyPrint();            format.setEncoding("GBK");            //6.生成xml文件            File file = new File("rssnews.xml");            XMLWriter writer;            try {                writer = new XMLWriter(new FileOutputStream(file), format);                //设置是否转义,默认值是true,代表转义                writer.setEscapeText(false);                writer.write(document);                writer.close();            } catch (IOException e) {                e.printStackTrace();            }        }        public static void main(String[] args) {            new DOM4JTest().createXML();        }    }

生成的文件:

    <? xml version = "1.0" encoding="GBK"?>    <rss version="2.0">        <channel>            <title><![CDATA[上海移动互联网产业促进中心正式揭牌 ]]></title>        </channel>    </rss>

其他内容可以自己自行添加。

JDOM生成RSS文件
 public class JDOMTestCreate {        private void createXML() {            //1.生成一个根节点            Element rss = new Element("rss");            //2.为节点添加属性            rss.setAttribute("version", "2.0");            //3.生成一个document对象            Document document = new Document(rss);            Element channel = new Element("channel");            rss.addContent(channel);            Element title = new Element("title");            //设置转义转义字符            CDATA cdata = new CDATA("上海移动互联网产业促进中心正式揭牌");            title.setContent(cdata);            channel.addContent(title);            Format format = Format.getCompactFormat();            //设置换行缩进,encoding            format.setIndent("  ");            format.setEncoding("GBK");            //4.创建XMLOutputter的对象            XMLOutputter outputer = new XMLOutputter(format);            try {                //5.利用outputer将document对象转换成xml文档                outputer.output(document, new FileOutputStream(new File("rssnews.xml")));            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }        public static void main(String[] args) {            JDOMTestCreate creater = new JDOMTestCreate();            creater.createXML();        }    }

   <?xml version="1.0" encoding="GBK"?>   <rss version="2.0">        <channel>            <title><![CDATA[上海移动互联网产业促进中心正式揭牌]]></title>        </channel>   </rss>

四种方式的比较:

原创粉丝点击