您的位置:首页 > 编程语言 > Java开发

java解析xml之PULL解析

2016-02-19 17:45 363 查看
除了可以使用SAX的方式解析XML外,也可以是用java自带的PULL来解析文件。

PULL 解析器的运行方式和sax解析器很相似,它提供了类似的事件。

如开始元素和结束元素,使用parser.next ()可以进行下一个元素,并且触发相应的事件,事件将作为代码被发送,因此可以使用一个switch来对事件进项选择,然后进行选择,然后进行响应的处理,当开始解析元素的时候,调用parser.next ()方法法可以获得下一个Text类型的元素。

PULL 解析的特点:

简单的结构:一个接口,一个异常,一个工厂做成的PULL 解析器。

简单易用,PULL解析器只有一个重要的方法next 方法,他被用来检索下一个事件,

其包含5个常用的属性:

START DOCUMENT :

START_TAG :开始节点

TEXT : 节点的内容

END_TAG :结束节点

EDN_DOCUMENT :没有其他事件可用

实例如下:

解析如下文件 person.xml

<?xml version="1.0" encoding="UTF-8"?>

<persons>

<person id="1">

<name>杨跟超</name>

<tel>188290974</tel>

<age>18</age>

</person>

<person id="2">

<name>王建</name>

<tel>18829290900</tel>

<age>18</age>

</person>

<person id = "3">

<name>Jack</name>

<tel>13673234578</tel>

<age>18</age>

</person>

</persons>

创建一个person类实现set与get与toString 方法 (元素应包括 (id, name, age,tel)) 这里不给出。

创建业务类:

public class pullXmlTools {

public pullXmlTools() {

}

/* inputStream 从服务器获取xml文件,以流的形式返回

* encode : 编码格式

*/

public static List <Person> parseXML (InputStream inputStream , String encode) throws XmlPullParserException, IOException{

List <Person > list = null;

Person person = null; // 装载解析每一个person节点的内容

// 创建以个解析XML的工厂

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

// 获得xml 解析类的应用

XmlPullParser parser = factory.newPullParser();

parser.setInput(inputStream, encode);

// 获得事件的类型

int eventType = parser.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT){// 表示当前的节点不是文档的结束

switch (eventType) {

case XmlPullParser.START_DOCUMENT:

// 如果是文档开始 (创建以个集合装载内容)

list = new ArrayList<Person>();

break;

case XmlPullParser.START_TAG: //如果是开始节点

if ("person".equals(parser.getName())){

// 取出属属性值

person= new Person();

int id = Integer.parseInt(parser.getAttributeValue(0));// 表示第0个属性

person.setId(id);

} else if ("name".equals(parser.getName())){

// 获取该节点的内容

String name = parser.nextText();

person.setName(name);

} else if ("age".equals(parser.getName())){

int age = Integer.parseInt(parser.nextText());

person.setAge(age);

}

else if ("tel".equals(parser.getName())){

String tel = parser.nextText();

person.setTel(tel);

}

break;

case XmlPullParser.END_TAG :

if("person".equals(parser.getName())){

list.add(person);

person= null;

}

break;

}

eventType = parser.next();

}

return list;

}

}

工具类从服务器读xml文档并以流的形式返回 HttpUtils.java:

public class HttpUtils {

public HttpUtils() {

}

public static InputStream getXML(String path){

InputStream inputStream = null;

try {

URL url = new URL (path);

if (url!= null){

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

connection .setConnectTimeout(3000);

connection.setDoOutput(true);

connection.setRequestMethod("GET");

int code = connection.getResponseCode();

if (code==200){

inputStream =connection.getInputStream();

}

}

}catch (Exception e){

}

return inputStream;

}

}

测试类:Test .java

public class Test {

public Test() {

// TODO Auto-generated constructor stub

}

public static void main(String[] args) throws XmlPullParserException, IOException {

String path = "http://192.168.97.2:8080/HelloServlet/Person.xml";

InputStream inputStream = HttpUtils.getXML(path);

List <Person> list = pullXmlTools.parseXML(inputStream,"utf-8");

for (Person person :list){

System.out.println(person.toString().trim());

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: