(三)流机制解析SAX

SAX

会在解析文档的各个部分时候调用事件回调,DOM是基于此基础上建立DOM树的

 

ContentHandler接口定义了若干个在解析文档时解析器会调用的回调方法

startElement  和endElement在每当遇到起始会终止标签时调用

characters在每当遇到字符数据时调用

startDocument 和endDocument分别在文档开始和结束时各调用一次

 

<font>

        <name>宋体</name>

        <size units="pt">23</size>

</font>

 

解析器会产生如下回调

    startElement  元素名font 

    startElement  元素名 name

    characters 内容 宋体

    endElement 元素名 name

    startElement 元素名 size 属性 units="pt"

    characters 内容 23

    endElement 元素名size

    endElement 元素名 font

 

SAXParserFactory  factory = SAXParseFactory.newInstance();

SAXParser  parser = factory.newSAXPrser();

parser.parse(source,handler);

 

handler属于DefualtHandler的一个子类,为如下四个接口定义了空的方法

ContentHandler            startElement()

DTDHandler

EntityResolver

ErrorHandler

 

 

setNamespaceAware(true)//激活命名空间

 

如果不需要dtd验证

factory.setFeature("http://apache.rog/xml/features/nonvalidating/load-external-dtd",false);

 

 

StAX  

一种拉解析器

inputStream in = url.openStream();

XMLInputFactory factory = XMLInputFactory.newInstance();

XMLStreamReader parser = factory.createXMLStreamReader(in);

while(parser.hasNext()){

    int event = parser.next();

    Call parser methods to obtain event details

}

 

<font>

        <name>宋体</name>

        <size units="pt">23</size>

</font>

解析器将产生如下事件

START_ELEMENT  元素名 font

CHARACTERS  内容 空白字符串

START_ELEMENT  元素名 name

CHARACTERS 内容 宋体

END_ELEMENT 元素名name

CHARACTERS  内容 空白字符串

.....

 

分析这些属性调用XMLStreamReader类中的恰当方法

String units = parser.getAttributeValue(null,"unit");

默认情况下命名空间是开启的

 

XMLInputStream factory = XMLInputFactory.newInstance();

factory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE,false);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值