• 使用JAXP进行sax解析


      1 package cn.liuning.sax;
      2 
      3 import javax.xml.parsers.SAXParser;
      4 import javax.xml.parsers.SAXParserFactory;
      5 
      6 import org.xml.sax.Attributes;
      7 import org.xml.sax.ContentHandler;
      8 import org.xml.sax.Locator;
      9 import org.xml.sax.SAXException;
     10 import org.xml.sax.XMLReader;
     11 import org.xml.sax.helpers.DefaultHandler;
     12 
     13 public class Demo1
     14 {
     15     /*
     16      * sax解析xml文档
     17      */
     18     public static void main(String[] args) throws Exception {
     19         //1.创建解析工厂
     20         SAXParserFactory factory = SAXParserFactory.newInstance();
     21         
     22         //2.得到解析器
     23         SAXParser sp = factory.newSAXParser();
     24         
     25         //3.得到读取器
     26         XMLReader reader = sp.getXMLReader();
     27         
     28         //4.设置内容处理器
     29         reader.setContentHandler(new TagValueHandler());
     30         
     31         //5.读取xm文档内容
     32         reader.parse("src/book.xml");    
     33     }
     34 }
     35 //得到xml文档的所有内容,实现接口ContentHandler
     36 class ListHandler implements ContentHandler
     37 {
     38     @Override
     39     public void setDocumentLocator(Locator locator) {
     40         // TODO 自动生成的方法存根        
     41     }
     42     @Override
     43     public void startDocument() throws SAXException {
     44         // TODO 自动生成的方法存根        
     45     }
     46     @Override
     47     public void endDocument() throws SAXException {
     48         // TODO 自动生成的方法存根        
     49     }
     50     @Override
     51     public void startPrefixMapping(String prefix, String uri)
     52             throws SAXException {
     53         // TODO 自动生成的方法存根        
     54     }
     55     @Override
     56     public void endPrefixMapping(String prefix) throws SAXException {
     57         // TODO 自动生成的方法存根        
     58     }
     59     @Override//开始标签
     60     public void startElement(String uri, String localName, String qName,
     61             Attributes atts) throws SAXException {
     62         System.out.println("<" + qName + ">");
     63         //获取标签属性
     64         for(int i=0;atts != null & i<atts.getLength();i++) //null
     65         {
     66             String attName = atts.getQName(i);
     67             String attValue = atts.getValue(i);
     68             
     69             System.out.println(attName + "=" + attValue);
     70         }        
     71     }
     72     @Override//结束标签
     73     public void endElement(String uri, String localName, String qName)
     74             throws SAXException {
     75         System.out.println("<" + qName +">");        
     76     }
     77     @Override//内容
     78     public void characters(char[] ch, int start, int length)
     79             throws SAXException {
     80         System.out.println(new String(ch,start,length));    
     81     }
     82     @Override
     83     public void ignorableWhitespace(char[] ch, int start, int length)
     84             throws SAXException {    
     85     }
     86     @Override
     87     public void processingInstruction(String target, String data)
     88             throws SAXException {
     89         // TODO 自动生成的方法存根        
     90     }
     91     @Override
     92     public void skippedEntity(String name) throws SAXException {
     93         // TODO 自动生成的方法存根        
     94     }    
     95 }
     96 //不实现ContentHandler接口,因为里面有很多用不到的方法,sun公司已经写了缺省的是吸纳类
     97 //阿么我只要继承然后写自己需要的方法就可以了。右键点击源码-覆盖实现方法
     98 
     99 //获取指定标签的值
    100 class TagValueHandler extends DefaultHandler{
    101     
    102     private String currentTag;  //记住当前解析到的是什么标签
    103     private int needNumber = 1;       //记住想获取第几个作者标签的值
    104     private int currnetnumber=0;//当前解析到的是第几个
    105 
    106     @Override
    107     public void startElement(String uri, String localName, String qName,
    108             Attributes attributes) throws SAXException {
    109         
    110         currentTag = qName;
    111         if(currentTag.equals("CreateTime")){
    112             currnetnumber++;
    113         }
    114     }
    115     @Override
    116     public void endElement(String uri, String localName, String qName)
    117             throws SAXException {
    118         currentTag = null;
    119     }
    120     @Override
    121     public void characters(char[] ch, int start, int length)
    122             throws SAXException {
    123         
    124         if("CreateTime".equals(currentTag) && currnetnumber==needNumber){
    125             System.out.println(new String(ch,start,length));
    126         }
    127     }
    128 }
  • 相关阅读:
    lua 函数调用1 -- 闭包详解和C调用
    lua API 小记2
    Lua API 小记1
    unity3d开发环境配置
    Hash表
    如何优化Cocos2d-X游戏的内存
    openGL光源概念
    Cocos2D-X屏幕适配新解
    Lua脚本在C++下的舞步
    lua table操作实例详解
  • 原文地址:https://www.cnblogs.com/liun1994/p/3834201.html
Copyright © 2020-2023  润新知