首页 > 代码库 > XML解析之dom4j

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

 

 

 

 

XML解析之dom4j