xml解析

Xml解析

一.DOM方式解析

1.将xml文档解析为一个树形结构的Document,以后的操作全都操作这个Document,一个节点就是一个对象,存取对象就是存取xml中的内容,将是实际内容的几倍。

优点:可以遍历文档树,知上下层节点的情况。

2.解析步骤

(1)获取DBF实例(DocumentBuilderFactory.newInstance())

(2)获取DB实例(dbf.newDocumentBuilder())

(3)DB的对象解析xml(db.parser())

调用parse解析---再用normalize()去掉格式化的空白

 

 

 

 

二.Pull解析

Pull解析

XMLPullParser xp = Xml.newPullParser();

xp.setInput(is,”utf-8”);

Int event = xp.getEventType();//触发一个解析,根据返回的值判断当前解析状态

Whileevent!=XMLPullParser.END_DOCUMENT{

Switch(event){

Case XMLPullParser.START_DOCUMENT//开始解析

Case XMLPullParser.START_TAG//开始元素

Case XMLPullParser.END_TAGCase XMLPullParser.END_DOCUMENT//结束元素

Case XMLPullParser.TEXT//解析文本

Case XMLPullParser.END_DOCUMENT://结束解析

break;

}

Xp.next();//触发下一个事件,即下一个元素

}

 

 

另一种方法

步骤:

(1)获取XPPF--XmlPullParserFactory.newInstance()

(2)获取XPP--xppf.newPullParser()

(3)解析setInput(isr)

(4)XmlUtils解析文档--开始解析和获取下一个元素

 

使用Pull生成xml文档

XMLSerializer serializer = Xml.newSerializer();

serializer.setOutput(outputStream,”utf-8”);

serializer.startTag(null,”persons”);//开始元素,根节点

for(Person person:persons){

    serializer.startTag(null,”person”);

serializer.attribute(null,”id”,person.getId().toString());//为元素添加属性

serializer.startTag(null,”name”);

serializer.text(person.getText());//添加文本

serializer.endTag(“name”);

 

serializer.startTag(null,”age”);

serializer.text(person.getAge());//添加文本

serializer.endTag(“age”);

 

serializer.endTag(“pseron”);

}

serializer.endTag(null,”persons”);

serializer.endDocument();

outputStream.flush();

outputStream.close();

注:

1.serializer.setOutput(outputStream,”utf-8”);设置输出方向,可以是输出流和写入器,写入器比输出流更加灵活,可以向更多的媒介进行输出,如硬盘,网络,内存等。

2.设置xml的标签即文档元素,通过startTag()开始一个标签,必须与之对应一个endTag()方法

3.对标签添加属性,文本的方法,attribute(),text();

 

 

三.SAX解析              

ContentHandler

XMLReader 

 XMLParser 

InputSource  

DefaultHandler

 

文档解析接口

注册处理器并启动解析器

XMLReader,JAXP对其的封装

控制解析器如何读取文档

 

解析接口的实现,通过继承他实现解析xml

 

 

 

 

 

 

 

步骤:

1.使用SAXParser解析代码

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

sp.parse(is,handler);//handler是继承自DefaultHandler类的对象,实现处理文档

2.使用XMLReader

XMLReader reader = new XMLReader();

reader.setContentHandler(handler);

reader.parser(is);

 

 

 

 

 

注:需继承自BaseHandler,在其中处理xml的内容

比较

SAX

PULL

DOM

内存占用少,速度快,对于反复检索xml来说,SAX比较臃肿

 

 

Pull可以生成xmlDOM可以对xml进行修改

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值