俊星的BLOG

          JAVA SAX之簡單實用

          SAX是Simple API for XML的縮寫(官網:saxproject),一個用來解決大型XML文檔讀取的接口,下面是我的簡單試用:
          import java.io.FileInputStream;

          import javax.xml.parsers.SAXParser;
          import javax.xml.parsers.SAXParserFactory;

          import org.xml.sax.Attributes;
          import org.xml.sax.InputSource;
          import org.xml.sax.SAXException;
          import org.xml.sax.XMLReader;
          import org.xml.sax.helpers.DefaultHandler;

          /**
           * 需要繼承自DefaultHandler
           * 
          @author kinkding
           
          */

          public class Test extends DefaultHandler {
              
          protected StringBuffer bodyText = new StringBuffer();
              
          private int level = 0;
              
              
          /** 開始解析元素 */
              
          public void startElement(String namespaceURI, String localName, String fullName, Attributes attributes)
                      
          throws SAXException {
                  System.out.print(getPrefix() 
          + "<" + fullName + "(");
                  
          for (int i = 0; i < attributes.getLength(); i++{
                      String temp 
          = attributes.getQName(i);
                      String value 
          = attributes.getValue(i);
                      System.out.print(temp 
          + ":" + value + " ");
                  }

                  System.out.println(
          ")>");
                  level
          ++;
              }

              
              
          /** 元素間內容的處理 */
              
          public void characters(char buffer[], int start, int length) throws SAXException {
                  bodyText.append(buffer, start, length);
              }

              
              
          /** 結束元素的解析 */
              
          public void endElement(String namespaceURI, String localName, String fullName) throws SAXException {
                  System.out.println(getPrefix() 
          + bodyText.toString().trim());
                  bodyText 
          = new StringBuffer();
                  level
          --;
                  System.out.println(getPrefix() 
          + "<" + fullName + ">");
              }


              
          private String getPrefix() {
                  String s 
          = "";
                  
          for (int i = 0; i < level; i++{
                      s 
          += " ";
                  }

                  
          return s;
              }


              
          public XMLReader getReader() throws Exception {
                  SAXParser parser 
          = SAXParserFactory.newInstance().newSAXParser();
                  XMLReader reader 
          = parser.getXMLReader();
                  reader.setDTDHandler(
          this);
                  reader.setContentHandler(
          this);
                  reader.setEntityResolver(
          this);
                  reader.setErrorHandler(
          this);
                  
          return reader;
              }


              
          public static void main(String[] args) throws Exception {
                  Test t 
          = new Test();
                  XMLReader reader 
          = t.getReader();
                  reader.parse(
          new InputSource(new FileInputStream("test.xml")));
              }

          }

          test.xml文件內容如下:
          <?xml version='1.0'?>
          <table name="job" code="1234">
              
          <tr>我的家</tr>
              
          <td colspan="2">生命就像一條大河</td>
              
          <td colspan="3">goodjob</td>
          </table>

          輸出如下:
          <table(name:job code:1234 )>
           <tr()>
            我的家
           <tr>
           <td(colspan:
          2 )>
            生命就像一條大河
           <td>
           <td(colspan:
          3 )>
            goodjob
           <td>
           
          <table>

          posted on 2009-04-30 20:29 俊星 閱讀(169) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 江山市| 漯河市| 平顶山市| 富宁县| 湖南省| 英山县| 南和县| 上高县| 华宁县| 新竹市| 汝阳县| 新余市| 德兴市| 陕西省| 普定县| 九龙坡区| 宾川县| 昭平县| 夏津县| 凤城市| 酒泉市| 广安市| 瑞安市| 运城市| 云南省| 大关县| 黄浦区| 石林| 东方市| 湖南省| 庆阳市| 枞阳县| 阆中市| 布尔津县| 沈丘县| 伊宁县| 山西省| 庄河市| 东海县| 沅陵县| 新丰县|