zoukankan      html  css  js  c++  java
  • JAVA_新建,解析XML文件

    XML文件

    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
        <book id="1">
            <name>冰与火之歌</name>
            <author>乔治马丁</author>
            <year>2016</year>
            <price>78</price>
        </book>
        <book id="2">
            <name>安徒生童话</name>
            <year>2016</year>
            <price>58</price>
            <language>English</language>
        </book>
    </bookstore>

    一:DOM新建及解析
    public class DOMTest {
        public static void main(String[] args) {
        }

        public DocumentBuilder getDocumentBuilder() {
            //创建一个DocumentBuilderFactory对象
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            //创建一个DocumentBuilder对象
            DocumentBuilder db = null;
            try {
                db = dbf.newDocumentBuilder();
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return db;
        }


        //生成xml方法
        public void createXML() {
            DocumentBuilder db = getDocumentBuilder();
            Document document = db.newDocument();
            document.setXmlStandalone(true);
            Element bookstore = document.createElement("bookstore");
            //创建子节点book
            Element book = document.createElement("book");
            Element name = document.createElement("name");
            book.setAttribute("id", "1");
            name.setTextContent("小王子");
            //将book节点加到bookstore根节点中
            bookstore.appendChild(book);
            book.appendChild(name);
            //将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("book1.xml")));
                } catch (TransformerConfigurationException e) {            
                    e.printStackTrace();
                }catch (TransformerException e) {            
                    e.printStackTrace();
                }
        }
       
        //解析xml方法
        public void xmlParser() {
                try {
                //通过DocumentBuilder对象的parser方法,解析books.xml文件到当前目录    
                    Document document = getDocumentBuilder().parse("books.xml");
                    //获取所有book节点的集合
                    NodeList bookList = document.getElementsByTagName("book");
                    //通过nodeList的getLength方法获取bookList长度
                    System.out.println("一共有" + bookList.getLength() + "本书");
                    //遍历每一个book节点
                    for (int i=0;i<bookList.getLength();i++) {
                        //通过item方法获取一个book节点,nodeList索引值从0开始
                        System.out.println("----------------开始第"+(i+1)+"次遍历----------------");
                        Node book = bookList.item(i);
                        //获取book节点的所有属性集合
                        NamedNodeMap attrs = book.getAttributes();
                        System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");
                        //遍历book属性
                        for(int j=0;j<attrs.getLength();j++) {
                            //通过item方法获取book节点的某一个属性
                            Node attr = attrs.item(j);
                            //获取属性名
                            System.out.print("属性:"+attr.getNodeName());
                            //获取属性值
                            System.out.println("--属性值:"+attr.getNodeValue());
                        }
                        //解析book节点的子节点
                        NodeList childNodes = book.getChildNodes();
                        //遍历每个节点,获取节点的节点名和节点值
                        System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");
                        for (int k = 0; k < childNodes.getLength(); k++) {
                            //区分text类型的node和element类型的node
                            if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE ) {
                                System.out.print("第"+(k+1)+"子节点的名称:"+childNodes.item(k).getNodeName());
                                System.out.println("--第"+(k+1)+"子节点的值:"+childNodes.item(k).getFirstChild().getNodeValue());    
                            }
                        }
                        System.out.println("----------------结束第"+(i+1)+"次遍历----------------");
                        }    
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }       
        }    
    }   
       

    二:SAX新建及解析

    三:JDOM新建及解析

    四:DOM4J新建及解析
    public class DOM4JTest {

      public static void main(String[] args) {
        }

     //创建xml文件
        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) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        //解析xml文件
        private void parseXML(){
            // 创建SAXReader的对象reader
            SAXReader reader = new SAXReader();
            try {
                // 通过reader对象的read方法加载books.xml文件,获取document对象
                Document document = reader.read(new File("src/res/books.xml"));
                // 通过document对象获取根节点bookstore
                Element bookstore = document.getRootElement();
                // 通过element对象的elementIterator方法获取迭代器
                Iterator it = bookstore.elementIterator();
                // 遍历迭代器,获取根节点中的信息(书籍)
                while (it.hasNext()) {
                    Book bookEntity = new Book();
                    System.out.println("----开始遍历----");
                    Element book = (Element) it.next();
                    // 获取book的属性名及属性值
                    List<Attribute> bookAttrs = book.attributes();
                    for (Attribute attr : bookAttrs) {
                        System.out.println("属性名:" + attr.getName() + "----属性值:" + attr.getValue());

                        if (attr.getName().equals("id")) {
                            bookEntity.setId(attr.getValue());
                        }
                    }
                    Iterator itt = book.elementIterator();
                    while (itt.hasNext()) {
                        Element bookchild = (Element) itt.next();
                        System.out.println("节点名:" + bookchild.getName() + "节点值:" + bookchild.getStringValue());
                        if (bookchild.getName().equals("price")) {
                            bookEntity.setPrice(bookchild.getStringValue());
                        }

                    }
                    System.out.println("----结束遍历----");
                    System.out.println("----bookEntity----" + bookEntity.getId());
                    System.out.println("----bookEntity----" + bookEntity.getPrice());
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    }

    Book.entity
    public class Book {
        private String id;
        private String name;
        private String author;
        private String year;
        private String price;
        private String language;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        public String getYear() {
            return year;
        }
        public void setYear(String year) {
            this.year = year;
        }
        public String getPrice() {
            return price;
        }
        public void setPrice(String price) {
            this.price = price;
        }
        public String getLanguage() {
            return language;
        }
        public void setLanguage(String language) {
            this.language = language;
        }
    }

  • 相关阅读:
    ORACLE函数介绍
    msdn的javascript文章转载
    baidu的高级搜索命令
    周杰伦 青花瓷 蒲公英的约定 我不配 彩虹 歌词和下载
    谷歌百度相争 新浪渔翁得利
    tomcat+jsp web运行环境搭建
    C#2008与.NET 3.5 高级程序设计读书笔记(24) LINQ API编程
    C#2008与.NET 3.5 高级程序设计读书笔记(16) 类型反射、晚期绑定和基于特性的编程
    C#2008与.NET 3.5 高级程序设计读书笔记(15) .NET程序集入门
    C#2008与.NET 3.5 高级程序设计读书笔记(25) WCF
  • 原文地址:https://www.cnblogs.com/yay1101/p/7832263.html
Copyright © 2011-2022 走看看