⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursorparse.java

📁 java 的关于web serive教程
💻 JAVA
字号:
package cursor;

import java.io.FileInputStream;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;


/**
 * CursorParse sample is used to demonstrate the use
 * of STAX cursor approach. In this approach application
 * instructs the parser to read the next event in the XML 
 * input stream by calling <code>next()</code>.
 * 
 * Note that <code>next()</code> just returns an integer constant 
 * corresponding to underlying event where the parser is positioned.
 * Application needs to call relevant function to get more 
 * information related to the underlying event.
 *
 * You can imagine this approach as a virtual cursor moving across
 * the XML input stream. There are various accessor methods which
 * can be called when that virtual cursor is at particular event.
 *
 * 
 * @author <a href="neeraj.bajaj@sun.com">Neeraj Bajaj</a> Sun Microsystems,inc.
 *
 */

public class CursorParse {
   
       
    private static void printUsage() {
        System.out.println("usage: java -classpath CursorParse -x <count> <xmlfile>");
    }
    
    public static void main(String[] args) throws Exception {
        
        int count = 0 ;
        String filename = null;
        
        try {
            filename = args[2];
            if(args[0].equals("-x")){
                count = Integer.parseInt(args[1]);
            }
            else{
                printUsage() ;
            }
        } catch (ArrayIndexOutOfBoundsException aioobe){
            printUsage();
            System.exit(0);
        } catch (Exception ex){
            printUsage();
            ex.printStackTrace() ;
        }
        
        
        XMLInputFactory xmlif = null ;
        try{
            xmlif = XMLInputFactory.newInstance();
            xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
            xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
            //set the IS_COALESCING property to true , if application desires to
            //get whole text data as one event.            
            xmlif.setProperty(XMLInputFactory.IS_COALESCING , Boolean.FALSE);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        System.out.println("");
        System.out.println("FACTORY: " + xmlif);
        System.out.println("filename = "+ filename);
        System.out.println("");
        
        long starttime = System.currentTimeMillis() ;
        
        try{
            for(int i = 0 ; i < count ; i++){

                //pass the file name.. all relative entity refernces will be resolved against this as
                //base URI.                                                
                XMLStreamReader xmlr = xmlif.createXMLStreamReader(filename, new FileInputStream(filename));
                //when XMLStreamReader is created, it is positioned at START_DOCUMENT event.
                int eventType = xmlr.getEventType();
                //printEventType(eventType);
                printStartDocument(xmlr);
                //check if there are more events in the input stream
                while(xmlr.hasNext()){
                    eventType = xmlr.next();                   
                    //printEventType(eventType);
                    
                    //these functions prints the information about the particular event by calling relevant function
                    printStartElement(xmlr);                    
                    printEndElement(xmlr);                    
                    printText(xmlr);                    
                    printPIData(xmlr);
                    printComment(xmlr);
                    
                }

            }
        }catch(XMLStreamException ex){
            System.out.println(ex.getMessage());
            if(ex.getNestedException() != null)ex.getNestedException().printStackTrace();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
        long endtime = System.currentTimeMillis();
        System.out.println(" Parsing Time = " + (endtime - starttime) );
        
    }
    
    /**
     * Returns the String representation of the given integer constant.
     *
     * @param eventType Type of event.
     * @return String representation of the event
     */    
    public final static String getEventTypeString(int eventType) {
        switch (eventType){
            case XMLEvent.START_ELEMENT:
                return "START_ELEMENT";
            case XMLEvent.END_ELEMENT:
                return "END_ELEMENT";
            case XMLEvent.PROCESSING_INSTRUCTION:
                return "PROCESSING_INSTRUCTION";
            case XMLEvent.CHARACTERS:
                return "CHARACTERS";
            case XMLEvent.COMMENT:
                return "COMMENT";
            case XMLEvent.START_DOCUMENT:
                return "START_DOCUMENT";
            case XMLEvent.END_DOCUMENT:
                return "END_DOCUMENT";
            case XMLEvent.ENTITY_REFERENCE:
                return "ENTITY_REFERENCE";
            case XMLEvent.ATTRIBUTE:
                return "ATTRIBUTE";
            case XMLEvent.DTD:
                return "DTD";
            case XMLEvent.CDATA:
                return "CDATA";
            case XMLEvent.SPACE:
                return "SPACE";
        }
        return "UNKNOWN_EVENT_TYPE , " + eventType;
    }
    
    private static void printEventType(int eventType) {        
        System.out.println("EVENT TYPE("+eventType+") = " + getEventTypeString(eventType));
    }
    
    private static void printStartDocument(XMLStreamReader xmlr){
        if(xmlr.START_DOCUMENT == xmlr.getEventType()){
            System.out.println("<?xml version=\"" + xmlr.getVersion() + "\"" + " encoding=\"" + xmlr.getCharacterEncodingScheme() + "\"" + "?>");
        }
    }
    
    private static void printComment(XMLStreamReader xmlr){
        if(xmlr.getEventType() == xmlr.COMMENT){
            System.out.print("<!--" + xmlr.getText() + "-->");
        }
    }
            
    private static void printText(XMLStreamReader xmlr){
        if(xmlr.hasText()){
            System.out.print(xmlr.getText());
        }
    }
    
    private static void printPIData(XMLStreamReader xmlr){
        if (xmlr.getEventType() == XMLEvent.PROCESSING_INSTRUCTION){
            System.out.print("<?" + xmlr.getPITarget() + " " + xmlr.getPIData() + "?>") ;
        }
    }
    
    private static void printStartElement(XMLStreamReader xmlr){
        if(xmlr.isStartElement()){
            System.out.print("<" + xmlr.getName().toString());
            printAttributes(xmlr);
            System.out.print(">");
        }
    }
    
    private static void printEndElement(XMLStreamReader xmlr){
        if(xmlr.isEndElement()){
            System.out.print("</" + xmlr.getName().toString() + ">");
        }
    }
    
    private static void printAttributes(XMLStreamReader xmlr){
        int count = xmlr.getAttributeCount() ;
        if(count > 0){
            for(int i = 0 ; i < count ; i++) {
                System.out.print(" ");
                System.out.print(xmlr.getAttributeName(i).toString());
                System.out.print("=");
                System.out.print("\"");
                System.out.print(xmlr.getAttributeValue(i));
                System.out.print("\"");
            }            
        }
        
        count = xmlr.getNamespaceCount();
        if(count > 0){
            for(int i = 0 ; i < count ; i++) {
                System.out.print(" ");
                System.out.print("xmlns");
                if(xmlr.getNamespacePrefix(i) != null ){
                    System.out.print(":" + xmlr.getNamespacePrefix(i));
                }                
                System.out.print("=");
                System.out.print("\"");
                System.out.print(xmlr.getNamespaceURI(i));
                System.out.print("\"");
            }            
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -