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();

 

原文地址:https://www.cnblogs.com/SkyGood/p/3964816.html