`
小鑫的java
  • 浏览: 143245 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

XML_SAX解析

    博客分类:
  • XML
XML 
阅读更多
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class SAXParser {

    public static void main(String[] args) {
    	
     
        SAXParser sax = new SAXParser();
        sax.parseXMLFile("student.xml");

    }

    /**
     * 解析文档
     * @param fileName XML文件的名字
     */
    private void parseXMLFile(String fileName) {
    	
        try {
			//通过指定解析器的名称来动态加载解析器
            XMLReader parser = XMLReaderFactory.createXMLReader();

			//处理内容前要注册内容管理器
            parser.setContentHandler(new XMLContentHandler());

			//开始解析文档
            parser.parse(fileName);
        }
        catch (IOException e) {
           e.printStackTrace();
        }
        catch (SAXException e) {
            e.printStackTrace();
        }
    }
}

*****************************************
import org.xml.sax.*;

public class XMLContentHandler 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 = "";

     /**
     * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
     * @param locator
     */
    public void setDocumentLocator(Locator locator) {

    }

    /**
     * 在解析整个文档开始时调用
     */
    public void startDocument() throws SAXException {
        System.out.println("XML文件开始解析");
    }

    /**
     * 在解析整个文档结束时调用
     */
    public void endDocument() throws SAXException {
        System.out.println("XML文件解析结束");
    }

    /**
     * 在解析命名空间开始时调用
     */
    public void startPrefixMapping(String prefix, String uri) throws
        SAXException {

    }

    /**
     * 在解析命名空间结束时调用
     */
    public void endPrefixMapping(String prefix) throws SAXException {

    }

    /**
     * 在解析元素开始时调用
     * @param namespaceURI
     * @param localName
     * @param qName
     * @param atts
     */
    public void startElement(String namespaceURI, String localName,
                             String qName, Attributes atts) throws SAXException {
       System.out.println("Start");
    }

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

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

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

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

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

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

    /**
     * 取得元素数据
     * @param ch
     * @param start
     * @param length
     */
    public void characters(char[] ch, int start, int length) throws
        SAXException {
    	System.out.println("gogo");
        currentData = new String(ch, start, length).trim();
    }

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

    }

    /**
     * 在解析到处理指令时,调用此方法。
     * 这些处理指令不包括XML的版权指令,它由解析器本身识别。
     * @param target
     * @param data
     */
    public void processingInstruction(String target, String data) throws
        SAXException {

    }

    /**
     * 当未验证解析器忽略实体时调用此方法
     * @param name
     */
    public void skippedEntity(String name) throws SAXException {

    }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics