xml解析dom4j xpath方式
2010-10-30 20:12
323 查看
用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
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
相关文章推荐
- xml解析得到数据并将其插入数据库(dom4j非Xpath方式)
- javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)
- 【XML解析】(5)DOM4J中的XPath的使用方式及其【完整语法详细说明】
- dom4j用XPath解析xml 遇到的问题
- XML解析方式之DOM、SAX、JDOM、DOM4J
- 【慕课笔记】4-1 应用DOM4J及JDOM方式解析XML—JDOM开始解析前的准备工作
- 使用dom4j和XPath解析XML之例子二
- DOM4J方式创建解析XML
- 使用dom4j的xPath解析XML
- Java中使用DOM方式解析和创建XML文档、及dom4j使用简介
- 利用DOM4J开发包 进行XML解析和Xpath
- XML的四种解析方式之JDOM&DOM4J
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- dom4j 使用xpath 解析 persistence.xml 出现xmlns后不能解析问题解决
- 用dom4j的方式解析和生成xml文件
- 使用dom4j解析xml文档以及用XPath实现相关的操作
- 解析XML的两种方式 javax | dom4j
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- 采用Dom4j及xpath解析xml文件
- XML解析-Dom4j的DOM解析方式更新XML