Java XML 解析之Dom4j

 Dom4j是功能强大而且容易使用的Java xml编程模型。Dom4j专为Java平台设计,完全支持Java集合框架,支持JAXP,TrAX,DOM,SAX,XSLT,集成XPATH。

一个非常简单的例子: (XML文件使用前面《XML基础》所用的XML文件)

得到Document:

SAXReader reader  =   new  SAXReader();
Document document 
=  reader.read(XmlFile.getSample2Stream());

XmlFile的代码:

     public   static  InputStream getSample1Stream() ... {
        
return XmlFile.class.getResourceAsStream("/sample.xml");
    }

    
public   static  InputStream getSample2Stream() ... {
        
return XmlFile.class.getResourceAsStream("/sample2.xml");
    }

遍历:

     public   void  printTree(Document doc)
    
... {
        Element root 
= doc.getRootElement();
        
this.printElement(root, "");
    }


    
private   void  printElement(Element em, String prefix)
    
... {
        System.out.println(prefix 
+ em.getName());
        
for (Iterator itr = em.attributeIterator(); itr.hasNext();)
        
...{
            Attribute attr 
= (Attribute) itr.next();
            System.out.print(prefix
+attr.getName());
            System.out.println(
"=" + attr.getData());
        }

        
if (em.getTextTrim()!=null&&!em.getTextTrim().equals(""))
        
...{
            System.out.println(prefix
+em.getTextTrim());
        }

        
for (Iterator itr = em.elementIterator(); itr.hasNext();)
        
...{
            Element sub 
= (Element) itr.next();
            
this.printElement(sub, prefix + "  ");
        }

    }

可以看到Dom4j的iterator接口非常好用,类似于Java的iterator。

修改:操作也很简单,创建一个节点,增加到文档中的某个节点下就可以。

     public   void  changeOrder(Document doc)
    
... {
        Element root 
= doc.getRootElement();
        Element order 
= root.element("order");
        Element item 
= new BaseElement("item");
        Element desc 
= new BaseElement("desc");
        desc.setText(
"我爱中国");
        item.add(desc);
        item.addAttribute(
"sku""o319-wp");
        item.addAttribute(
"quantity""122");
        order.add(item);
    }

输出:

     public   void  write(Document document)  throws  Exception
    
... {
        XMLWriter writer 
= new XMLWriter(System.out, new OutputFormat());
        writer.write(document);
        writer.flush();
    }

 此外,Dom4j还支持xpath(代码来自与Dom4j官网)xpath请参考http://www.w3school.com.cn/xpath/

 public void bar(Document document) {
        List list = document.selectNodes( "//foo/bar" );

        Node node = document.selectSingleNode( "//foo/bar/author" );

        String name = node.valueOf( "@name" );
    }

总的来说,Dom4j是一个很不错的框架,小巧玲珑,容易使用,效率不错(超过JDOM),Dom4j可以使用不同的解析器,比如Crimson 或 Xerces,也支持Java对xml的抽象JAXP。

你可能感兴趣的:(java,编程,框架,xml)