jdom解析:http://blog.csdn.net/java4found/article/details/8665365dom解析:http://blog.csdn.net/java4found/article/details/8665034sax解析:http://blog.csdn.net/java4found/article/details/8663214
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文件:<?xml version="1.0" encoding="UTF-8"?><persons><person id="328"><name>zhangsan</name><age>23</age></person><person id="303"><name>lisi</name><age>22</age></person></persons>将解析后的数据封装在Person类中,类如下:public class Person {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + id;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (id != other.id)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}public Person(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public Person() {super();}}
导入dom4j.jar,使用Dom4j对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);}}}