<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    數據加載中……
    JAVA XML 解析之四 -SAX
    2008年4月21日  Edited By DingDangXiaoMa
    SAX 是采用事件驅動的方式與Dom最大的不同是,它不用讀取完所有的XML文件就可以進行處理。采用流式的處理方式(呵,呵,我也不知道是什么意思)
    example:
    注冊內容管理器:MyContentHandler.java
    public class MyContentHandler implements ContentHandler {
        
    // DTD中定義的元素
        private static final String ELEMENT_NAME = "name";
        
    private static final String ELEMENT_SEX = "sex";
        
    private static final String ELEMENT_LESSON = "lesson";
        
    private static final String ELEMENT_LESSON_NAME = "lessonName";
        
    private static final String ELEMENT_LESSON_SCORE = "lessonScore";
        
    private static final String ELEMENT_STUDENT = "student";
        
    private static final String ELEMENT_LINE = "breakLine";

        
    private String currentData = ""// 當前元素的數據
        private String lessonName = "";
        
    private String lessonScore = "";

        
    public MyContentHandler() {
        }

        
    /**
         * 當其他某一個調用事件發生時,先調用此方法來在文檔中定位。
         * 
         * 
    @param locator
         
    */
        
    public void setDocumentLocator(Locator locator) {

        }

        
    /**
         * 在解析整個文檔開始時調用
         * 
         * 
    @throws SAXException
         
    */
        
    public void startDocument() throws SAXException {
            System.out.println(
    "**** Student information start ****");
        }

        
    /**
         * 在解析整個文檔結束時調用
         * 
         * 
    @throws SAXException
         
    */
        
    public void endDocument() throws SAXException {
            System.out.println(
    "**** Student information end ****");
        }

        
    /**
         * 在解析名字空間開始時調用
         * 
         * 
    @param prefix
         * 
    @param uri
         * 
    @throws SAXException
         
    */
        
    public void startPrefixMapping(String prefix, String uri)
                
    throws SAXException {

        }

        
    /**
         * 在解析名字空間結束時調用
         * 
         * 
    @param prefix
         * 
    @throws SAXException
         
    */
        
    public void endPrefixMapping(String prefix) throws SAXException {

        }

        
    /**
         * 在解析元素開始時調用
         * 
         * 
    @param namespaceURI
         * 
    @param localName
         * 
    @param qName
         * 
    @param atts
         * 
    @throws SAXException
         
    */
        
    public void startElement(String namespaceURI, String localName,
                String qName, Attributes atts) 
    throws SAXException {

        }

        
    /**
         * 在解析元素結束時調用
         * 
         * 
    @param namespaceURI
         * 
    @param localName
         *            本地名,如student
         * 
    @param qName
         *            原始名,如LIT:student
         * 
    @throws SAXException
         
    */
        
    public void endElement(String namespaceURI, String localName, String qName)
                
    throws SAXException {
            
    if (localName.equals(ELEMENT_NAME)) {
                System.out.println(localName 
    + ":" + currentData);
            }

            
    if (localName.equals(ELEMENT_SEX)) {
                System.out.println(localName 
    + ":" + currentData);
            }

            
    if (localName.equals(ELEMENT_LESSON_NAME)) {
                
    this.lessonName = currentData;
            }

            
    if (localName.equals(ELEMENT_LESSON_SCORE)) {
                
    this.lessonScore = currentData;
            }

            
    if (localName.equals(ELEMENT_LESSON)) {
                System.out.println(lessonName 
    + ":" + lessonScore);
            }

            
    if (localName.equals(ELEMENT_LINE)) {
                System.out.println(
    "------------------------------------");
            }
        }

        
    /**
         * 取得元素數據
         * 
         * 
    @param ch
         * 
    @param start
         * 
    @param length
         * 
    @throws SAXException
         
    */
        
    public void characters(char[] ch, int start, int length)
                
    throws SAXException {
            currentData 
    = new String(ch, start, length).trim();
        }

        
    /**
         * 取得元素數據中的空白
         * 
         * 
    @param ch
         * 
    @param start
         * 
    @param length
         * 
    @throws SAXException
         
    */
        
    public void ignorableWhitespace(char[] ch, int start, int length)
                
    throws SAXException {

        }

        
    /**
         * 在解析到處理指令時,調用此方法。 這些處理指令不包括XML的版權指令,它由解析器本身識別。
         * 
         * 
    @param target
         * 
    @param data
         * 
    @throws SAXException
         
    */
        
    public void processingInstruction(String target, String data)
                
    throws SAXException {

        }

        
    /**
         * 當未驗證解析器忽略實體時調用此方法
         * 
         * 
    @param name
         * 
    @throws SAXException
         
    */
        
    public void skippedEntity(String name) throws SAXException {

        }
    錯誤管理器:MyErrorHandler.java
    public class MyErrorHandler implements ErrorHandler {

        
    public MyErrorHandler() {
        }

        
    /**
         * XML的警告信息
         * 
         * 
    @param exception
         * 
    @throws SAXException
         
    */
        
    public void warning(SAXParseException exception) throws SAXException {
            System.out.println(
    "!!!WARNING!!!");
            System.out.println(exception.getLineNumber() 
    + ":("
                    
    + exception.getSystemId() + ")" + exception.getMessage());
        }

        
    /**
         * 不符合XML規范時調用此方法
         * 
         * 
    @param exception
         * 
    @throws SAXException
         
    */
        
    public void error(SAXParseException exception) throws SAXException {
            System.out.println(
    "!!!ERROR!!!");
            System.out.println(exception.getLineNumber() 
    + ":("
                    
    + exception.getSystemId() + ")" + exception.getMessage());
        }

        
    /**
         * 非良構的文檔時調用此方法
         * 
         * 
    @param exception
         * 
    @throws SAXException
         
    */
        
    public void fatalError(SAXParseException exception) throws SAXException {
            System.out.println(
    "!!!FATAL!!!");
            System.out.println(exception.getLineNumber() 
    + ":("
                    
    + exception.getSystemId() + ")" + exception.getMessage());
        }
    }
    DTD 管理器: MyDTDHandler.java
    public class MyDTDHandler implements DTDHandler {

        
    public MyDTDHandler() {
        }

        
    /**
         * 當實體聲明為不必解析的實體時調用此方法,比如NDATA類型。
         * 
         * 
    @param name
         * 
    @param publicId
         * 
    @param systemId
         * 
    @throws SAXException
         
    */
        
    public void notationDecl(String name, String publicId, String systemId)
                
    throws SAXException {
            System.out.println(
    "**notationDecl**");
            System.out.println(
    "name:" + name);
            System.out.println(
    "publicId" + publicId);
            System.out.println(
    "systemId:" + systemId);
        }

        
    /**
         * 當處理符號聲明時調用此方法,比如NOTATION。
         * 
         * 
    @param name
         * 
    @param publicId
         * 
    @param systemId
         * 
    @param notationName
         * 
    @throws SAXException
         
    */
        
    public void unparsedEntityDecl(String name, String publicId,
                String systemId, String notationName) 
    throws SAXException {
            System.out.println(
    "**unparsedEntityDecl**");
            System.out.println(
    "name:" + name);
            System.out.println(
    "publicId" + publicId);
            System.out.println(
    "systemId:" + systemId);
            System.out.println(
    "notationName:" + notationName);
        }
    }
    SAX方式處理:MySAXParser.java
    import java.io.IOException;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;
    public class MySAXParser {
        
    public MySAXParser() {
        }
        
    public static void main(String[] args) {
            MySAXParser mySAXParser 
    = new MySAXParser();
            mySAXParser.parserXMLFile(
    "http://localhost/struts2.0/xml/SutInfo.xml");
        }
        
    /**
         * 解析文檔XML文檔的URI
         * 
    @param fileURI
         
    */
        
    private void parserXMLFile(String fileURI) {
            
    try {
                
    // 通過指定解析器的名稱來動態加載解析器
                XMLReader parser = XMLReaderFactory
                        .createXMLReader(
    "org.apache.xerces.parsers.SAXParser");
                
    // 處理內容前要注冊內容管理器
                parser.setContentHandler(new MyContentHandler());
                
    // 處理錯誤前要注冊錯誤管理器
                parser.setErrorHandler(new MyErrorHandler());
                
    // 處理DTD前要注冊DTD管理器
                parser.setDTDHandler(new MyDTDHandler());
                
    // 打開解析器的驗證
                parser.setFeature("http://xml.org/sax/features/validation"true);
                
    // 開始解析文檔
                parser.parse(fileURI);
            } 
    catch (IOException ioe) {
                System.out.println(ioe.getMessage());
            } 
    catch (SAXException saxe) {
                System.out.println(saxe.getMessage());
            }
        }
    }
    說明:
    org.xml.sax.*,包含于jdk 中。
    這個例子是 javaresearch 上的例子,我也沒有弄明白是什么意思,呵。呵。誰若是看到了些貼,請回復,說一說您的看法。

    posted on 2008-04-21 17:34 叮當小馬 閱讀(188) 評論(0)  編輯  收藏 所屬分類: XML

    主站蜘蛛池模板: 最近2022中文字幕免费视频| 成全视频高清免费观看电视剧| 在线观看H网址免费入口| 亚洲动漫精品无码av天堂| 中文在线免费视频| 亚洲乱码一区二区三区在线观看| av网站免费线看| 久久99国产亚洲高清观看首页| 在线观看免费黄网站| 久久精品国产亚洲香蕉| 99久久久国产精品免费牛牛四川 | 97在线视频免费播放| 亚洲av无码国产精品色午夜字幕 | 最新国产精品亚洲| 国产色婷婷精品免费视频| 男男gay做爽爽免费视频| 亚洲国产成人乱码精品女人久久久不卡 | 波多野结衣在线免费观看| 亚洲人6666成人观看| 老司机永久免费网站在线观看| 精品亚洲视频在线| 亚洲熟妇无码另类久久久| 特级精品毛片免费观看| 亚洲va在线va天堂va手机| 日本特黄特黄刺激大片免费| 巨胸喷奶水视频www免费视频| 亚洲高清视频在线观看| 免费无码黄十八禁网站在线观看| 蜜芽亚洲av无码一区二区三区| 亚洲国产精品成人一区| 男人都懂www深夜免费网站| 自怕偷自怕亚洲精品| 免费鲁丝片一级观看| 国产免费区在线观看十分钟| 亚洲黄色在线观看| 亚洲成av人片不卡无码久久| 亚洲精品免费视频| 亚洲a∨无码精品色午夜| 亚洲AV无码一区二区乱子伦| 最近中文字幕mv手机免费高清| 一级大黄美女免费播放|