利用JAXP的SAX方式对xml进行解析

来源:互联网 发布:淘宝客邻尚品的货真假 编辑:程序博客网 时间:2024/05/16 08:44
import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.junit.Test;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * JAXP的SAX解析; * @author 大蘑菇 * */public class SAXTest {    @Test    public void demo1() throws Exception {        /**        * 1.创建解析器工厂        * 2、由工厂创建解析器        * 3.解析xml文档。 --- 绑定一个处理器        */       SAXParserFactory factory = SAXParserFactory.newInstance();           SAXParser parser = factory.newSAXParser();        // 解析xml --- 绑定处理器        //获得第二个作者节点的内容;       parser.parse( "src/book.xml", new MyDefaultHandler());    }}/** * 处理具体事件的handler * @author 大蘑菇 * */class MyDefaultHandler extends DefaultHandler {    private boolean flag = false;    private int idx = 1;//用来标记遇到的第几个作者节点        /**     * 遇到element节点;     */    @Override    public void startElement(String uri, String localName, String qName,           Attributes attributes) throws SAXException {        if ("作者" .equals(qName)) {            flag = true ;       }    }        /**     * element的内容;     */    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        if (flag && idx == 2) { //将第二个作者节点的内容输出;           System. out.println(new String(ch, start, length));       }    }    /**     * element结束     */    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        if ("作者" .equals(qName)) {            flag = false ;            idx++;       }    }}

0 0