Dom4J是一个易用,开源的库,多用于解析XML,Xpath,Xslt,它用于Java平台,采用了Java集合框架,并完全支持DOM,SAX和Jaxp
Dom4J的下载地址 http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/
1 读取/解析Xml文档(依赖于org.dom4j.io)
//该方法返回的是整个XML文档对象 public Document read(String fileName) throws SomeException{ SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(new file(fileName)); return doc; }
方法说明
read方法为重载形式的方法
read(InputStream is); //使用输入流作为参数 read(File file); //使用文件对象作为参数 read(Url url); //使用同一转定位符作为参数
2 获取root根节点
任何一个规范的XML文件都必须有一个"根" 做为基础节点,如下例
<?xml version="1.0" encoding="utf-8"?> <!--该文档中每一个Employee节点都可表示为一个Employee对象,每个对象都有四个属性----> <Employees> <Employee> <id>32001</id> <employeeName>Hostman</employeeName> <employeeAge>22</employeeAge> <employeeEmail>[email protected]</employeeEmail> </Employee> <Employee> <id>32002</id> <employeeName>green</employeeName> <employeeAge>23</employeeAge> <employeeEmail>[email protected]</employeeEmail> </Employee> </Employees>
//该方法返回的是Employees节点对象 public Element getRootElement(Document document)throws SomeException{ return document.getRootElement(); }
3 迭代XML树对象
有三种方法
//rootElement 为根节点对象 for (Iterator i = rootElement.elementIterator(); i.hasNext();) { Element element = (Element) i.next(); for(int c=0;c<element.elements().size();c++){ Element node = (Element) element.elements().get(c); System.out.println(node.getText()); } for(Iterator i = rootElement.elementIterator();i.hasNext();){ Element e = (Element) i.next(); for(int c=0;c<e.elements().size();c++){ Element node = (Element) e.elements().get(c); System.out.println(node.getText()); } for(Iterator i = rootElement.elementIterator("data");i.hasNext();){ Element e = (Element) i.next(); for(int c=0;c<e.elements().size();c++){ Element node = (Element) e.elements().get(c); System.out.println(node.getText()); } //获取XML文档对象中的属性 List list = rootElement.elements(); for(int i=0;i<list.size();i++){ Element e = (Element) list.get(i); List attrList = e.attributes(); for(int c=0;c<attrList.size();c++){ Attribute attr = (Attribute) attrList.get(c); System.out.println(attr.getName() + " " + attr.getText()); } }