zoukankan      html  css  js  c++  java
  • Java中解析和生成xml

    XML解析:
        * 解析xml可以做:
            * 如果xml作为配置文件:读取
            * 如果xml作为传输文件:写,读
        * xml解析思想:
            * DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
                * 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
                * 缺点:dom树非常占内存,解析速度慢。
            
                Document
                Element
                Text
                Attribute
                Comment


            * SAX:逐行读取,基于事件驱动
                * 优点:不占内存,速度快
                * 缺点:只能读取,不能回写

            
        * xml常用的解析器:
            * JAXP:sun公司提供的解析。支持dom和sax。(不常用)
            * JDOM:
            * DOM4J:dom for java民间方式,但是是事实方式。非常好。  支持dom
                1.导入jar包 dom4j.jar
                2.创建解析器
                    SAXReader reader = new SAXReader();
                3.解析xml 获得document对象
                    Document document = reader.read(url);

        * XPATH:专门用于查询
                    * 定义了一种规则。
                    * 使用的方法:
                        * selectSingleNode():
                        * selectNodes():
                使用步骤:
                    1、注意:要导包 jaxen...jar
                    2、创建解析器
                        SAXReader reader = new SAXReader();
                    3、解析xml 获得document对象
                        Document document = reader.read(url);
        
        
        * 解析XML:
            // 1、得到某个具体的节点内容:第2本书的书名--》葵花宝典
            // 2、遍历所有元素节点


        XPath:
            //    nodename 选取此节点。
            //    /     从根节点选取。
            //    //     从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
            //    ..     选取当前节点的父节点。
            //    @     选取属性。
            //      [@属性名]    属性过滤
            //      [标签名]     子元素过滤

    例子:

    /* demo.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book name="Harry Potter">
            <author>J.K. Rowling</author>
            <price>29.90$</price>
        </book>
        <book name="冰与火之歌">
            <author>马丁</author>
            <price>28.90$</price>
        </book>
    </books>
    */
    @Test
    public void test1() throws DocumentException{
        SAXReader reader = new SAXReader();
        Document doc = reader.read("./src/demo.xml");
        Element root = doc.getRootElement();
        Element book1 = root.element("book");
        System.out.println(book1.getPath());
        System.out.println(book1.elementText("price"));
        List<?> list = root.elements("book");
        Element book2 = (Element) list.get(1);
        System.out.println(book2.attributeValue("name"));
        for(Iterator<?> it = book1.elementIterator();it.hasNext() ; ){
            Element ele = (Element) it.next();
            System.out.println(ele.getName()+" : "+ele.getText());
        }
    }
    
    @Test 
    public void test2() throws Exception{//使用 XPath,只用于快速查询,需要用jaxen...jar包
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File("src/demo.xml"));
        Node node = doc.selectSingleNode("/books/book[2]/author");//需要jaxen.jar包
        String s = node.getText();
        System.out.println(s);
        node = doc.selectSingleNode("/books/book[2]/@name");
        s = node.getText();
        System.out.println(s);
        
        List<Node> booknames = doc.selectNodes("/books//@name");
        for (Node node1 : booknames) {
            System.out.println(node1.getText());
        }
        
        List<?> nodes = doc.selectNodes("/books/*/*");
        for (int i=0; i<nodes.size(); ++i){
            Node node1 = (Node) nodes.get(i);
            System.out.println(node1.getName() + ": " + node1.getText());
        }
    }
    View Code


            
                    
                
                
                
        
        
        
        
        
       

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    Verilog语言
    OrCAD --从SNAPEDA导入封装库
    RAM/ROM IP一次性总结
    USB之Main item, Local item和Global item 的作用范围与归类
    发光LED压降与工作电流总结
    C之输入输出函数(3) -- 请使用sscanf()
    C之输入输出函数(2) -- gets()
    C之输入输出函数(1) -- fgets()
    C中的lvalue和rvalue
    关于字符串的一点补充
  • 原文地址:https://www.cnblogs.com/htj10/p/13059256.html
Copyright © 2011-2022 走看看