xml文件的dom4j解析
dom4j解析xml文件,不用多说,这确实是一个非常优秀的解析xml的api。dom4j可以说在性能、功能上独树一帜,而且它同Jdom一样,有着简单易用的特性。
说起dom4j的渊源,从名字上也让人觉得它跟Jdom有什么瓜葛,确实如此。这个团队本来都是本着开发一个更为简单易用的xml解析工具,可是后来团队中有不同的意见,于是一部人带着他们的思想,一起开发了dom4j。两个不同的思想,竞争起来当然使得团队要不惜一切的开发好产品。所以说Jdom与Dom4j都是很优秀的xml解析api。 不过,总的来说,Dom4j相对来说比较受青睐,它具备了极为强大的解析能力,且支持XPath,越来越多的软件中都使用dom4j来作为xml的解析。 使用dom4j要使用到其提供的api,可从http://sourceforge.net/projects/dom4j/files/latest/download下载,dom4j的开发包中包含一些第三方开发包,当调用dom4j某些功能需要添加相应的开发包,大部分情况下,在项目中导入基本的dom4j.jar即可。下面是一个要解析的person.xml文件:import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dom4JTest {public static void main(String[] args) {try {//取得dom4j的解析器SAXReader reader = new SAXReader();//获取xml文件的输入流InputStream inStream = Dom4JTest.class.getClassLoader().getResourceAsStream("person.xml");//取得代表文档的Document对象Document document = reader.read(inStream);//取得根结点Element root = document.getRootElement();ArrayList<Person> persons = new ArrayList<Person>();Person person = null;//取得根节点的子结点,并进行遍历取出数据,封装在Person中List list = root.elements();for (int i = 0, size = list.size(); i < size; i++) {person = new Person();//或取第一个子结点<person>Element e = (Element) list.get(i);//获取属性idString id = e.attributeValue("id");person.setId(Integer.valueOf(id));//遍历<person>的子结点,以便取出数据。List ce = e.elements();for (int j = 0, csize = ce.size(); j < csize; j++) {Element tempE = (Element) ce.get(j);String qName = tempE.getName();//根据结点的名称,将数据封装于Person类的对象中。switch (qName) {case "name":String name = tempE.getText();person.setName(name);break;case "age":String age = tempE.getText();person.setAge(Integer.valueOf(age));break;}}//结束一轮<person>结点的遍历,将person对象存入集合,并清空。persons.add(person);person = null;}//打印集合。printList(persons);} catch (DocumentException e) {e.printStackTrace();}}//打印集合。public static void printList(ArrayList<Person> persons) {for (Person p : persons) {System.out.println(p);}}}