學(xué)習(xí)sax解析xml心得

          可以使用SAXParser的parse方法進(jìn)行解析,也可以使用XmlReader的parse方法進(jìn)行解析,但是最好是使用XmlReader,因?yàn)閄mlReader是接口。
          基本的初始化方法如下:
          File f=new File("d:"+File.separator+"e.xml");
                  InputSource ip=new InputSource(new FileInputStream(f));
                  try {
                      SAXParser  s=SAXParserFactory.newInstance().newSAXParser();
                      XMLReader xmlReader=s.getXMLReader();
                      xmlReader.setContentHandler(new MyHandler());
                      xmlReader.parse(ip);
                      
                  } catch (ParserConfigurationException e) {
                      e.printStackTrace();
                  } catch (SAXException e) {
                      e.printStackTrace();
                  }

          其中MyHandler類繼承了DefaultHandler,可以overwrite其中的方法,使其滿足需求。
          例子:

          public void startElement(String uri, String localName, String name,
                          Attributes attributes) throws SAXException {

                      if (logger.isInfoEnabled()) {
                          logger
                                  .info("startElement(String, String, String, Attributes) - uri="
                                          + uri
                                          + ", localName="
                                          + localName
                                          + ", name="
                                          + name );
                      }

                      for (int i = 0; i < attributes.getLength(); i++) {
                          if (logger.isInfoEnabled()) {
                              logger.info("endElement(String, String, String) - uri=" + uri
                                      + ", localName=" + localName + ", qName=" + attributes.getQName(i)+ ", attributes=" + attributes.getValue(i));
                          }
                      }
                      

                      super.startElement(uri, localName, name, attributes);
                  }
          //對(duì)text node的處理
          public void characters(char[] ch, int start, int length)
                          throws SAXException {
                      if (logger.isInfoEnabled()) {
                          logger.info("characters(char[], int, int) - ch="+ new String(ch,start,length));//這里這樣子寫才能得到text node 真正的值。范圍: characters() 事件不僅包括不僅一個(gè)字符串。它還包括起始和長(zhǎng)度信息。實(shí)際上,ch 字符數(shù)組包括整個(gè)文檔。應(yīng)用程序一定不能嘗試讀取饋送給 characters() 事件的范圍之外的字符。
                      }

                      super.characters(ch, start, length);
                  }


          posted on 2007-11-15 17:27 劉錚 閱讀(312) 評(píng)論(0)  編輯  收藏 所屬分類: XML

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          留言簿(1)

          文章分類(141)

          文章檔案(147)

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 长葛市| 无棣县| 仙桃市| 迁安市| 通州区| 固阳县| 大埔县| 琼中| 朔州市| 镇赉县| 汪清县| 博野县| 岗巴县| 积石山| 韶关市| 宝兴县| 江孜县| 宜阳县| 铜鼓县| 密云县| 陇南市| 元谋县| 衡阳市| 西青区| 罗定市| 岳普湖县| 宁海县| 金堂县| 无锡市| 开封市| 东源县| 白水县| 浙江省| 德安县| 青州市| 修武县| 余江县| 乐清市| 阿拉善右旗| 山西省| 南开区|