XML基础知识(5)


SAX解析:


1.DOM解析XML文件时,需要先读取XML文档,在内存中构建Document对象,然后进行操作。当文档很大时,容易内存溢出。
SAX解析在读取文档时就会对文档进行处理,不需要全部装载完。


2.SAX解析一般步骤:
(1)创建解析工厂
(2)创建解析器
(3)获取XML读取器
(4)设置内容处理器
(5)解析XML文档


具体代码:
//SAX解析XML文档
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

//创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();

//创建解析器
SAXParser parser = factory.newSAXParser();

//获取读取器
XMLReader reader = parser.getXMLReader();

//设置内容处理器
reader.setContentHandler(new linkedHandler());

//解析XML文档
reader.parse("src/book.xml");
}




3.内容处理器的设置


(1)解析所有内容(因为是实现,其他方法不变,就变下面几个方法)
class linkedHandler implements ContentHandler{
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("<"+qName+" ");
for(int i=0;i<atts.getLength();i++){
String name = atts.getQName(i);
String value = atts.getValue(i);
System.out.println(name + "=" + value);
}
System.out.println(" " + ">");

}


@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));

}



@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("</" + qName + ">");

}
}


(2)//查询特定标签下面的内容
class linkedHandler extends DefaultHandler{
private String currentTag;
private int needNumber = 2;
private int currentNumber;

public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
currentTag = qName;
if(currentTag.equals("作者")){
currentNumber++;
}

}


public void characters(char[] ch, int start, int length)
throws SAXException {
if("作者".equals(currentTag)&& currentNumber==needNumber){
System.out.println(new String(ch,start,length));
}

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值