XML解析之dom4j

一、XML解析方式有两类:
        一】DOM(文档对象模型)
            1)一次性将整个XML文件读到内存,形成一颗DOM树
        二】SAX(XML的简单API)[simple API for XML]
            1)SAX多次将XML文件的每部分读到内存

 

二、步骤:

  一】利用SAXReader类获取Document对象

        SAXReader saxReader = new SAXReader();

        Document document = saxReader.read(new File("src/com/suse/simpledom4j/car.xml"));

  二】通过Document获取元素和属性

    常用方法: 

              得到子元素的List集合:     List       elements()

              得到元素的名称:           String     getName()

              得到指定子元素引用:        Element    element("子元素名称");

              得到子元素封装的信息:      String     elementText("子元素名称");

              得到元素的属性值:         String      attributeValue("属性名");

              添加一个子元素:           Element     addElement("子元素名称");

              设置元素封装的信息:       void        setText("封装的信息");

              删除一个子元素:          boolean     remove(子元素引用);

              将元素转换成字符串:       String      asXML();

   三】通过XMLWriter类将内存中的XML文件回写到硬盘上

    常用类及方法:

       1)OutputFormat对象:制定流的输出时在文档中的显示格式

                常用方法:

                        返回一个优美的格式器对象:static OutputFormat createPrettyPrint();

          2) XMLWriter流对象:用于将内存中的XML文件输出到硬盘上

                构造方法:

                            XMLWriter(输出流)

                常用方法:

                            将内存中的XML写入到硬盘上:void writer(Document document);

                            关闭流:void close();

三、对XML文件进行增删改查

  code:

    private Document getDocument() throws Exception {

        SAXReader saxReader = new SAXReader();

        Document document = saxReader.read(new File("src/com/suse/simpledom4j/car.xml"));

        return document;

    }

    

    

    @Test

    public void add() throws Exception {

        Document document = getDocument();

        Element element = document.getRootElement();

        Element carElement = (Element) element.elements().get(0);

        Element priceElement = carElement.addElement("价格");

        priceElement.setText("20万");

        

        doc2XML(document);

    }

    

    @Test

    public void delete() throws Exception {

        Document document = getDocument();

        Element element = document.getRootElement();

        List<Element> elmentList = element.elements();



        Element carElement = elmentList.get(0);

        Element priceElement = carElement.element("价格");

        

        carElement.remove(priceElement);

        

        doc2XML(document);

    }

    

    @Test

    public void update() throws Exception {

        Document document = getDocument();

        Element rootElement = document.getRootElement();

        Element carElement  = (Element) rootElement.elements().get(0);

        

        carElement.element("价格").setText("60万元");

    

        doc2XML(document);

    }

    

    @Test

    public void select() throws Exception {

        Document document = getDocument();

        Element rootElement = document.getRootElement();

        

        Element carElement = (Element) rootElement.elements().get(0);

        String price = carElement.element("价格").getTextTrim();

        System.out.println("价格为:" + price);

    }

    

    

    private void doc2XML(Document doc) throws Exception {

        

        //得到一个格式优美的格式输出器

        OutputFormat outputFormat = OutputFormat.createPrettyPrint();

        

        

        File file = new File("src/com/suse/simpledom4j/car.xml");

        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(file), outputFormat);

        

        

        xmlWriter.write(doc);

        xmlWriter.close();

        

        

    }

 

四、其它API

 一】 DocumentHelper对象:   

          static Document createDocument();//创建一个Document对象
          
static Element createElement("元素名");//创建一个元素,并返回此元素的子类【注:可以使用】 static Document parseText("符合XML格式的字符串");//创建一个document对象并返回
        
              

 

  二】在指定位置插入节点元素
              ----通过List集合的add(index,E)方法
          方法原型:
                void add(int index, E element);

  三】字符串与XML文件的转换

    1)字符串  --->    XML
                通过parseText方法
                eg:

             String text = "<members> <member>sitinspring</member></members>";

                     Document dDocument = DocumentHelper.parseText(text);

 


        2)XML   --->        字符串
                通过asXML方法:Document、和Element对象都具有此方法
                eg:

                     SAXReader reader = new SAXReader();

                     Document document = reader.read(new File("input.xml"));

                     Element rootElement = docuemnt.getRootElement();

                     Element memberElement = root.element("member");

                    

                     String str_doc = document.saXML();

                     String str_rootEle = rootElement.asXML();

                     String str_memberEle = memberElement.asXML();

 

 

 

 

你可能感兴趣的:(dom4j)