Java XML 解析之Dom4j

本文介绍Dom4j——一种高效且易于使用的Java XML处理库。文章通过实例展示了如何使用Dom4j读取、遍历、修改XML文件,并利用XPath进行查询。

 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值