用xpath方式解析xml,得到xml的document 有如下2中方式:
1.doc= reader.read(new File("D://project//XmlParse//xmlFiles//student.xml"));
2.InputStream is= Thread.currentThread().getContextClassLoader().getResourceAsStream("//com//xie//xmlparse//dom4j//xpath//student.xml");
doc=reader.read(is);
第二中方式中,要注意xml文件的存放位置,在myeclipse中跟src目录同级,则可以直接使用文件名,若跟处理类在同一个包下,则应该包含包,就像上面那样。否则就会出错。如果is为空,那么doc=reader.read(is);这句会报一个异常,
org.dom4j.DocumentException: null Nested exception: null
java.net.MalformedURLException
//student.xml
<?xml version="1.0" encoding="UTF-8"?>
<school>
<class name="030713">
<student>
<stuid>03071300</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>03071301</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>03071302</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
<class name="030714">
<student>
<stuid>03071400</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>03071401</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>03071402</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
</school>
解析程序
//ParseXml.java
package com.xie.xmlparse.dom4j.xpath;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlXpath {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
SAXReader reader=new SAXReader();
InputStream is= Thread.currentThread().getContextClassLoader().getResourceAsStream("//com//xie//xmlparse//dom4j//xpath//student.xml");
Document doc=null;
try {
doc=reader.read(is);
//doc= reader.read(new File("D://project//XmlParse//xmlFiles//student.xml"));
List<Element> eleColl= (ArrayList<Element>) doc.selectObject("/school/class");
for (Iterator iterator = eleColl.iterator(); iterator.hasNext();) {
Element ele = (Element) iterator.next();
System.out.println(ele.attributeValue("name"));
List<Element> eleStu=(ArrayList<Element>)doc.selectObject("/school/class/student/stuid");
for(int i=0;i<eleStu.size();i++){
System.out.println(eleStu.get(i).getText());
}
List<Element> eleStu1=(ArrayList<Element>)doc.selectObject("/school/class/student/stuname");
for(int i=0;i<eleStu1.size();i++){
System.out.println(eleStu1.get(i).getText());
}
List<Element> eleStu2=(ArrayList<Element>)doc.selectObject("/school/class/student/stusex");
for(int i=0;i<eleStu2.size();i++){
System.out.println(eleStu2.get(i).getText());
}
List<Element> eleStu3=(ArrayList<Element>)doc.selectObject("/school/class/student/stuage");
for(int i=0;i<eleStu3.size();i++){
System.out.println(eleStu3.get(i).getText());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
//运行结果:
030713
03071300
03071301
03071302
03071400
03071401
03071402
小明
小花
不知道
小明
小花
不知道
男
女
男
男
女
男
10
20
15
10
20
15
030714
03071300
03071301
03071302
03071400
03071401
03071402
小明
小花
不知道
小明
小花
不知道
男
女
男
男
女
男
10
20
15
10
20
15
Nested exception: java.net.MalformedURLException