xml解析-pull和dom4j

来源:互联网 发布:sql 取日期部分 编辑:程序博客网 时间:2024/06/10 23:00


一. 对于XML数据的解析,主要有以下三种技术:

a)DOM解析:解析器读入整个文档,并在内存中构建一个文档树形结构,应用程序可以使用 DOM  API来操作这个树。
b)SAX解析:解析器以流的方式读取文档。在发现元素开始、元素结束、文本、文档开始或结束等信息时产生相应事件,应用程序可编写对应的事件监听程序以进行处理。
c)PULL解析: 该方式与SAX很相似,不同的是该解析器产生的事件是一个数字,因此可以使用一个switch语句对感兴趣的事件进行处理。


1).  创建 URL 以及 HttpURLConnection 对象 
public InputStream getIs(){

InputStream is = null;

try {
/
URL url=new URL(path);

HttpURLConnection  conn=(HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");
is=conn.getInputStream();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;

}

2). Dom4j解析:

public void getByDom(String path){

SAXReader reader = new SAXReader();

InputStream is = getIs(path);

try {
//绑定输入流--获取了文档对象
Document doc=reader.read(is,"utf-8");
//找根节点
Element root=doc.getRootElement();
//获取当前节点下所有节点集合
List<Element> data=root.elements();
for (int i = 0; i <data.size(); i++) {
Element eve=data.get(i);
System.out.println("属性值:"+eve.attributeValue("key"));
System.out.println("文本值:"+eve.getText());

}
} catch (DocumentException e) {
e.printStackTrace();
}

}

3).Pull解析

public void getByPull(String path){

InputStream is=getIs(path);
//创建
PULL解析器对象
XmlPullParser par=Xml.newPullParser();
try {
//加载流
par.setInput(is, "utf-8");
//获得驱动事件
int eventType=par.getEventType();
while (eventType!=XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
//获取标签名
String tagName=par.getName();
break;
case XmlPullParser.START_TAG:
tagName=par.getName();
if(tagName.equals("type-name")){
//取出属性值
String att=par.getAttributeValue(0);
String att2=par.getAttributeValue(null, "key");
//取出文本值
String txt=par.nextText();
System.out.println(att2+"--"+txt);
}
break;
case XmlPullParser.END_TAG:
tagName=par.getName();
//System.out.println(tagName);
break;
}
eventType=par.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}

0 0