SAX解析XML文档

来源:互联网 发布:好用的爽肤水 知乎 编辑:程序博客网 时间:2024/06/10 04:10
package com.bird.sax;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.ContentHandler;import org.xml.sax.Locator;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;/** * @use SAX解析 * @author Bird * */public class XmlReader {public static void main(String [] args) throws Exception{// 获得工厂SAXParserFactory factory = SAXParserFactory.newInstance();//获得解析器SAXParser sp = factory.newSAXParser();//获取读取器XMLReader reader = sp.getXMLReader();//设置内容处理器reader.setContentHandler(new ValuesHandle());//读取XML文档的内容reader.parse("d://book.xml");}}class ValuesHandle extends DefaultHandler{//只解析作者的名字private String currentTag ;//记住当前想要解析的标签 private int needNumber = 2;//记住你想要的标签的位置private int currentNumber; //当前解析的是第几个@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if("作者".equals(currentTag) && currentNumber == needNumber){System.out.println(new String(ch,start,length));}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {currentTag = null;}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {currentTag = qName;if(currentTag.equals("作者")){currentNumber++;}}}class ListHandle implements ContentHandler{@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {System.out.println(new String(ch,start,length));}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endPrefixMapping(String prefix) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void ignorableWhitespace(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void processingInstruction(String target, String data)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void setDocumentLocator(Locator locator) {// TODO Auto-generated method stub}@Overridepublic void skippedEntity(String name) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {System.out.println("<" + qName + ">");for(int i = 0; atts != null && i < atts.getLength(); i++){//注意这种写法String  name = atts.getQName(i);String values = atts.getValue(i);System.out.println(name +  " " + values);}}@Overridepublic void startPrefixMapping(String prefix, String uri)throws SAXException {// TODO Auto-generated method stub}}