<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      寶寶不開心

      用SAX解析xml文件,java

      (此文為(https://www.imooc.com/video/4482)之隨筆)

      1、用SAX解析xml文件大致分為三步

       

      寫了一個XML文件作為例子

      (1)main方法代碼如下:

      import java.io.IOException;
      import javax.xml.parsers.ParserConfigurationException;
      import javax.xml.parsers.SAXParser;
      import javax.xml.parsers.SAXParserFactory;
      import org.xml.sax.SAXException;
      public class SAX {
      
          public static void main(String[] args) {
              //1、獲取一個SAXParserFactory的實例
              SAXParserFactory factory = SAXParserFactory.newInstance();
              try {
                  //2、通過factory獲取SAXParser的實例
                  SAXParser parser = factory.newSAXParser();
                  //3、創建SAXParserHandler對象
                  SAXParserHandler handler = new SAXParserHandler();
                  parser.parse("book.xml", handler);
              } catch (ParserConfigurationException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              } catch (SAXException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
              }
          }
      }

      (2)SAXParserHandler方法

      package cn.edu.zzuli.SAXTest;
      import org.xml.sax.Attributes;
      import org.xml.sax.SAXException;
      import org.xml.sax.helpers.DefaultHandler;
      public class SAXParserHandler extends DefaultHandler {
          /**
           * 用來遍歷xml文件的開始標簽
           */
          @Override
          public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
              // TODO Auto-generated method stub
              super.startElement(uri, localName, qName, attributes);
          }
          /**
           * 用來遍歷xml文件的結束標簽
           */
          @Override
          public void endElement(String uri, String localName, String qName) throws SAXException {
              // TODO Auto-generated method stub
              super.endElement(uri, localName, qName);
          }
          /**
           * 用來表示解析開始
           */
          @Override
          public void startDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.startDocument();
              System.out.println("SAX解析開始");
          }
          /**
           * 用來表示解析結束
           */
          @Override
          public void endDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.endDocument();
              System.out.println("SAX解析結束");
          }
          
      }

      當讀到<?xml version="1.0" encoding="UTF-8"?>時解析開始,當讀到最后一個節點結束標識(</>)解析結束

       

      2、使用SAX解析節點名和節點間文本

      重寫SAXParserHandler類里的startElement方法

      public class SAXParserHandler extends DefaultHandler {
          int bookindex = 1;
          /**
           * 用來遍歷xml文件的開始標簽
           */
          @Override
          public void startElement(String uri, String localName, String qName,
                  Attributes attributes) throws SAXException {
              //調用DefaultHandler類的startElement方法
              super.startElement(uri, localName, qName, attributes);
              //開始解析book元素的屬性
              if(qName.equals("book")) {
                  System.out.println("------------現在開始遍歷第" + bookindex + "本書---------");
                  //已知book元素下屬性的名稱,根據名稱獲取屬性值
                  String value = attributes.getValue("id");
                  System.out.println("book的屬性值是:" + value);
                  //不知道book元素下屬性的名稱以及個數,如何獲取元素名稱及屬性
                  int num = attributes.getLength();
                  for(int i = 0;i < num;i++) {
                      System.out.print("第" + (i + 1) + "個book元素的屬性名是" + attributes.getQName(i));
                      System.out.println("----book元素的屬性值是" + attributes.getValue(i));
                  }
              }else if(!qName.equals("book") && !qName.equals("bookstore")){
                  System.out.print("節點名是" + qName);
              }
          }
          /**
           * 用來遍歷xml文件的結束標簽
           */
          @Override
          public void endElement(String uri, String localName, String qName) throws SAXException {
              // TODO Auto-generated method stub
              super.endElement(uri, localName, qName);
              if(qName.equals("book")) {
                  System.out.println("------------結束遍歷第" + bookindex++ + "本書---------");
              }
          }
          /**
           * 用來表示解析開始
           */
          @Override
          public void startDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.startDocument();
              System.out.println("SAX解析開始");
          }
          /**
           * 用來表示解析結束
           */
          @Override
          public void endDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.endDocument();
              System.out.println("SAX解析結束");
          }
          @Override
          public void characters(char[] ch, int start, int length) throws SAXException {
              // TODO Auto-generated method stub
              super.characters(ch, start, length);
              String value = new String(ch, start, length);
           //通過trim()截掉空格和換行符,如果是空字符則跳過if執行語句
      if(!value.trim().equals("")) System.out.println("節點值為" + value); } }

       輸出結果為:

       

      (2)將book節點結構信息保存,用一個book類來保存

      重新寫SAXParserHandler類

      public class SAXParserHandler extends DefaultHandler {
          int bookindex = 1;
          //定義全局變量是為了使book對象和value值可以被多個方法訪問
          Book book =null;
          String value = null;
          private ArrayList<Book> bookList = new ArrayList<>();
          public ArrayList<Book> getBookList() {
              return bookList;
          }
          /**
           * 用來遍歷xml文件的開始標簽
           */
          @Override
          public void startElement(String uri, String localName, String qName,
                  Attributes attributes) throws SAXException {
              //調用DefaultHandler類的startElement方法
              super.startElement(uri, localName, qName, attributes);
              //開始解析book元素的屬性
              if(qName.equals("book")) {
                  //每一次遇到book就建立新的book對象
                  book = new Book();
                  System.out.println("------------現在開始遍歷第" + bookindex + "本書---------");
                  //已知book元素下屬性的名稱,根據名稱獲取屬性值
                  String value = attributes.getValue("id");
                  System.out.println("book的屬性值是:" + value);
                  //不知道book元素下屬性的名稱以及個數,如何獲取元素名稱及屬性
                  int num = attributes.getLength();
                  for(int i = 0;i < num;i++) {
                      System.out.print("第" + (i + 1) + "個book元素的屬性名是" + attributes.getQName(i));
                      System.out.println("----book元素的屬性值是" + attributes.getValue(i));
                      if(attributes.getQName(i) == "id") {
                          book.setId(attributes.getValue(i));
                      }
                  }
              }else if(!qName.equals("book") && !qName.equals("bookstore")){
                  System.out.print("節點名是" + qName);
              }
          }
          /**
           * 用來遍歷xml文件的結束標簽
           */
          @Override
          public void endElement(String uri, String localName, String qName) throws SAXException {
              // TODO Auto-generated method stub
              super.endElement(uri, localName, qName);
              if(qName.equals("book")) {
                  //把信息存入book對象之后,加到ArrayList之中
                  bookList.add(book);
                  //將book對象清空
                  book = null;
                  System.out.println("------------結束遍歷第" + bookindex++ + "本書---------");
              }else if(qName.equals("name")) {
                  book.setName(value);
              }else if(qName.equals("id")) {
                  book.setId(value);
              }else if(qName.equals("year")) {
                  book.setYear(value);
              }else if(qName.equals("money")) {
                  book.setMoney(value);
              }else if(qName.equals("color")) {
                  book.setColor(value);
              }else if(qName.equals("auther")) {
                  book.setAuther(value);
              }
          }
          /**
           * 用來表示解析開始
           */
          @Override
          public void startDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.startDocument();
              System.out.println("SAX解析開始");
          }
          /**
           * 用來表示解析結束
           */
          @Override
          public void endDocument() throws SAXException {
              // TODO Auto-generated method stub
              super.endDocument();
              System.out.println("SAX解析結束");
          }
           /**
           * 用來求得節點值
           */

          @Override
          public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            value = new String(ch, start, length);
            if(!value.trim().equals(""))
              System.out.println("節點值為" + value);
          }

       
       

      posted on 2018-07-17 16:00  寶寶不開心  閱讀(2315)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 亚洲国产欧美在线人成大黄瓜| 在线精品亚洲区一区二区| 天天干天天日| 亚洲老熟女乱女一区二区| 颍上县| 日韩成人高精品一区二区| 成人av午夜在线观看| 国产成人一区二区三区免费| 欧美成人h精品网站| 亚洲av无码成人精品区一区| 精品国精品国产自在久国产应用男| 亚洲成av人无码免费观看| 视频一区视频二区视频三| 在线国产精品中文字幕| 亚洲成a人片在线观看中文| 亚洲av色精品一区二区| 亚洲国产美女精品久久久| 久久久久国精品产熟女久色| 美女内射福利大全在线看| 真实国产老熟女无套内射| 亚洲综合精品中文字幕| 精品国产这么小也不放过| 嗯灬啊灬把腿张开灬动态图| 国产精品高清一区二区三区不卡| 国产成人精品无码一区二区老年人| 黔西县| 国产免费一区二区三区在线观看| 高清自拍亚洲精品二区| 天天弄天天模| 精品国产av无码一区二区三区 | 国内精品九九久久久精品| 最新国产精品中文字幕| 丁香婷婷激情综合俺也去| 国产精品成人高潮av| 勃利县| 日韩精品亚洲精品第一页| 国产高清在线精品一区不卡| 精品国产午夜福利在线观看| 久久天堂综合亚洲伊人HD妓女| 天堂V亚洲国产V第一次| 精品国产AV无码一区二区三区|