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

原文地址:https://www.cnblogs.com/yay1101/p/7832263.html