zoukankan      html  css  js  c++  java
  • 使用jaxp对比xml进行SAX解析

    package cn.itcast.sax;
    
    import java.io.IOException;
    
    import javax.xml.parsers.ParserConfigurationException;
    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;
    
    public class Demo1 {
    
        /**
         *sax方式解析book1.xml文件
         * @throws SAXException 
         * @throws ParserConfigurationException 
         * @throws IOException 
         */
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            
    
            //1.创建工厂
            SAXParserFactory factory = SAXParserFactory.newInstance();
            
            //2.用工厂创建解析器
            SAXParser sp = factory.newSAXParser();
            
            //3.利用解析器得到reader
            XMLReader reader = sp.getXMLReader();
            
            //4、在解析xml文档之前,设置好事件处理器
            reader.setContentHandler(new MyContentHandler2());
            
            //4.利用reader读取 xml文档
            reader.parse("src/book1.xml");
        }
    }
    //用于获取第一个售价节点的值:<售价>109</售价>
    class MyContentHandler2 extends DefaultHandler{
    
        private boolean isOk = false;
        private int index = 1;
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            if(isOk==true && index==1){
                System.out.println(new String(ch,start,length));
            }
        }
    
        @Override
        public void startElement(String uri, String localName, String name,
                Attributes attributes) throws SAXException {
            if(name.equals("售价")){
                isOk = true;
            }
        }
    
        @Override
        public void endElement(String uri, String localName, String name)
                throws SAXException {
            if(name.equals("售价")){
                isOk = false;
                index++;
            }
        }
        
        
        
        
        
    }
    
    //得到xml文档内容的事件处理器
    class MyContentHandler implements ContentHandler{
    
        public void startElement(String uri, String localName, String name,
                Attributes atts) throws SAXException {
            
            System.out.println("当前解析到了:" + name + ",这个标签是开始标签");
            for(int i=0;i<atts.getLength();i++){
                String attname = atts.getQName(i);
                String attvalue = atts.getValue(i);
                
                System.out.println(attname + "=" + attvalue);
            }
            
            
        }
        
        public void endElement(String uri, String localName, String name)
        throws SAXException {
            
            System.out.println("当前解析到了:" + name + ",这个标签是结束标签");
        
        }
        
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            
            System.out.println("当前解析到了内容:" + new String(ch,start,length));
        }
    
        public void endDocument() throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
    
    
        public void endPrefixMapping(String prefix) throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
        public void ignorableWhitespace(char[] ch, int start, int length)
                throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
        public void processingInstruction(String target, String data)
                throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
        public void setDocumentLocator(Locator locator) {
            // TODO Auto-generated method stub
            
        }
    
        public void skippedEntity(String name) throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
        public void startDocument() throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
        
    
        public void startPrefixMapping(String prefix, String uri)
                throws SAXException {
            // TODO Auto-generated method stub
            
        }
    
    
        
    }
  • 相关阅读:
    679 怎样杀死害虫?(对付一个系统最好的方式是“围城必阙”)
    678 "流浪地球"为什么是个好地方?(系统越复杂拥有好运气的机会也就越大)
    677 人类为什么会养猫?(做一件事理性的原因的背后往往还隐藏着自己都不曾发现的感性原因)
    职场人必知的三原则
    677 怎样当一个少数派?(越在意,越出众)
    675 为什么会有“黑天鹅”?(行为和对行为后果的负责与否决定了很多黑天鹅出现概率)
    不做特殊论者(没有所谓的理所当然,你所谓的成功很有可能只是因为运气)
    事实和观点(就事论事,事实有真假,观点无对错)
    一个程序员的价值观总结
    669 创新也是搞政治?(如何创新)
  • 原文地址:https://www.cnblogs.com/kydnn/p/4794226.html
Copyright © 2011-2022 走看看