8月20号 XML写入

对应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>

四种方式的比较:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值