国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java實現學習筆記(一)

2019-11-18 11:49:34
字體:
來源:轉載
供稿:網友

  首先,先給出一個比較基本的處理xml文件的程序。你不必細看,直接跳過即可。需要時可以返回來看。
  
  Echo01.java
  
  import java.io.*;
  
  import org.xml.sax.*;
  
  import org.xml.sax.helpers.DefaultHandler;
  
  import javax.xml.parsers.SAXParserFactory;
  
  import javax.xml.parsers.ParserConfigurationException;
  
  import javax.xml.parsers.SAXParser;
  
  public class Echo01 extends DefaultHandler
  
  {
  
  StringBuffer textBuffer;
  
  public static void main(String argv[])
  
  {
  
    if (argv.length != 1) {
  
      System.err.  
      System.exit(1);
  
    }
  
    // Use an instance of ourselves as the SAX event handler
  
    DefaultHandler handler = new Echo01();
  
    // Use the default (non-validating) parser
  
       SAXParserFactory factory = SAXParserFactory.newInstance();
  
    try {
  
      // Set up output stream
  
      out = new OutputStreamWriter(System.out, "UTF-8");
  
      // Parse the input
  
      SAXParser saxParser = factory.newSAXParser();
  
      saxParser.parse( new File(argv[0]), handler);
  
    } catch (Throwable t) {
  
      t.printStackTrace();
  
    }
  
    System.exit(0);
  
  }
  
  static private Writer out;
  
  //===========================================================
  
  // SAX DocumentHandler methods
  
  //===========================================================
  
  public void startDocument()
  
  throws SAXException
  
  {
  
    emit("");
  
    nl();
  
  }
  
  public void endDocument()
  
  throws SAXException
  
  {
  
    try {
  
      nl();
  
      out.flush();
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  public void startElement(String namespaceURI,
  
               String sName, // simple name
  
               String qName, // qualified name
  
               Attributes attrs)
  
  throws SAXException
  
  {
  
    echoText();
  
       String eName = sName; // element name
  
    if ("".equals(eName)) eName = qName; // not namespaceAware
  
    emit("<"+eName);
  
    if (attrs != null) {
  
      for (int i = 0; i < attrs.getLength(); i++) {
  
        String aName = attrs.getLocalName(i); // Attr name
  
        if ("".equals(aName)) aName = attrs.getQName(i);
  
        emit(" ");
  
        emit(aName+"=/""+attrs.getValue(i)+"/"");
  
             }
    }
  
    emit(">");
  
  }
  
  public void endElement(String namespaceURI,
  
              String sName, // simple name
  
              String qName // qualified name
  
             )
  
  throws SAXException
  
  {
  
    echoText();
  
    String eName = sName; // element name
  
    if ("".equals(eName)) eName = qName; // not namespaceAware
  
    emit("");
  
  }
  
  public void characters(char buf[], int offset, int len)
  
  throws SAXException
  
  {
  
           String s = new String(buf, offset, len);
  
    if (textBuffer == null) {
  
      textBuffer = new StringBuffer(s);
  
    } else {
  
      textBuffer.append(s);
  
    }
  
  }
  
  //===========================================================
  
  // Utility Methods ...
  
  //===========================================================
  
  // Display text accumulated in the character buffer
  
  private void echoText()
  
  throws SAXException
  
  {
  
    if (textBuffer == null) return;
  
              String s = ""+textBuffer;
  
       emit(s);
  
       textBuffer = null;
  
  }
  
  // Wrap I/O exceptions in SAX exceptions, to
  
  // suit handler signature requirements
  
  private void emit(String s)
  
  throws SAXException
  
  {
  
    try {
  
      out.write(s);
  
      out.flush();
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  // Start a new line
  
  private void nl()
  
  throws SAXException
  
  {
  
   String lineEnd = System.getProperty("line.separator");
  
    try {
  
      out.write(lineEnd);
  
    } catch (IOException e) {
  
      throw new SAXException("I/O error", e);
  
    }
  
  }
  
  }
  
  從程序中可以看出,解析一個XML文件的核心語句是下面一部分:
  
   // Use an instance of ourselves as the SAX event handler
  
    DefaultHandler handler = new Echo01();
  
     // Use the default (non-validating) parser
  
       SAXParserFactory factory = SAXParserFactory.newInstance();
  
    try {
  
      // Set up output stream
  
      out = new OutputStreamWriter(System.out, "UTF-8");
  
       // Parse the input
  
      SAXParser saxParser = factory.newSAXParser();
  
      saxParser.parse( new File(argv[0]), handler);
  
     } catch (Throwable t) {
  
      t.printStackTrace();
  
    }
  
  先是創建一個SAXParserFactory工廠類的實例,然后通過SAXParser saxParser = factory.newSAXParser(); 這個工廠類的方法創建了一個saxParser。將xml文件(new File(argv[0]))和一個Sax Event Handler(handler)(在這個程序里面,這個Handler其實是本身這個類,這個類繼續了org.xml.sax.helpers.DefaultHandler 這個類,并且在前面初始化了它:DefaultHandler handler = new Echo01(); )傳遞給它,讓它進行解析。
  
  關于xml文件的解析過程中的處理全部在Handler里面實現。一般Parser接受的是DefaultHandler或者HandlerBase這兩個類。 這個例子里面的類是繼續DefaultHandler這個虛類的??聪聢D:
  
 Java實現學習筆記(一)(圖一)

  而DefaultHandler是實現了EntityResolver, DTDHandler, ContentHandler, ErrorHandler四個接口的虛類。分別定義了如下的方法:
  
 Java實現學習筆記(一)(圖二)

  不同的方法,在不同的時候被Parser調用,(這個不同的時候就是Event-based)
  
  具體介紹:(暫略)
  
  DefualtHandler的UML圖如下:
  
 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涿鹿县| 蒙阴县| 无锡市| 利辛县| 武隆县| 绍兴市| 岳池县| 长海县| 淮阳县| 瑞安市| 来凤县| 黄梅县| 茌平县| 鄂托克前旗| 临夏市| 综艺| 定远县| 黄大仙区| 武胜县| 布尔津县| 白城市| 台山市| 绍兴县| 博兴县| 临沂市| 盐亭县| 天祝| 宣武区| 吕梁市| 尼勒克县| 乐至县| 潮安县| 荆州市| 辉南县| 南岸区| 晋江市| 晴隆县| 内江市| 荥阳市| 松滋市| 兴安盟|