百度空间 | 百度首页 
 
查看文章
 
SAX解析XML文档详解_JAVA SAX解析XML文档详解_使用SAX解析XML文档_JAVA SAX解析XML文档_SAX解析XML文档
2009-08-22 15:00

SAX解析XML文档详解_JAVA SAX解析XML文档详解_使用SAX解析XML文档_JAVA SAX解析XML文档_SAX解析XML文档

步骤1.一个简单的XML文档:
   XML代码:
<?xml version="1.0" encoding="UTF-8"?>
<StudentInfo>
    <student>
        <name>赵海波</name>
        <sex>男</sex>
        <lesson>
            <lessonName>Spring整合开发</lessonName>
            <lessonScore>85</lessonScore>
        </lesson>
        <lesson>
            <lessonName>轻量级J2EE应用开发</lessonName>
            <lessonScore>95</lessonScore>
        </lesson>
        <lesson>
            <lessonName>Ajax应用开发</lessonName>
            <lessonScore>80</lessonScore>
        </lesson>
    </student>
    <student>
        <name>程卫娜</name>
        <sex>女</sex>
        <lesson>
            <lessonName>Spring整合开发</lessonName>
            <lessonScore>80</lessonScore>
        </lesson>
        <lesson>
            <lessonName>轻量级J2EE应用开发</lessonName>
            <lessonScore>85</lessonScore>
        </lesson>
        <lesson>
            <lessonName>Ajax应用开发</lessonName>
            <lessonScore>90</lessonScore>
        </lesson>
    </student>
</StudentInfo>
步骤2.用于处理XML文档的事件监听器:
   Java代码:
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 = "";  
    //当其他某一个调用事件发生时,先调用此方法来在文档中定位。  
    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  
    {  
        System.out.println("XML解析器开始解析命名空间");  
    }  
    //在解析命名空间结束时调用  
    public void endPrefixMapping(String prefix) throws SAXException  
    {  
        System.out.println("XML解析器解析命名空间结束");  
    }  
    //在解析元素开始时调用  
    public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException  
    {  
        System.out.println("XML解析器开始解析元素" + localName);  
    }  
    //在解析元素结束时调用  
    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);  
        }  
        System.out.println("XML解析器解析元素" + localName + "结束");  
    }  
    // 取得元素数据  
    public void characters(char[] ch, int start, int length) throws SAXException  
    {  
        currentData = new String(ch, start, length).trim();  
        System.out.println("XML解析器成功解析到元素数据");  
    }  
    //取得元素数据中的空白  
    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException  
    {  
    }  
    //在解析到处理指令时,调用此方法。  
    public void processingInstruction(String target, String data) throws SAXException  
    {  
    }  
    //当未验证解析器忽略实体时调用此方法  
    public void skippedEntity(String name) throws SAXException  
    {  
    }  
}

步骤3.通过主程序开始解析XML文档,解析XML文档的代码如下:
   java代码:
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");  
    }  
    // 解析文档  
    private void parseXMLFile(String fileName)  
    {         
        try
        {  
            //通过指定解析器的名称来动态加载解析器  
            XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");  
            //处理内容前要注册内容管理器  
            parser.setContentHandler(new XMLContentHandler());  
            //开始解析文档  
            parser.parse(fileName);  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        catch (SAXException e)  
        {  
            e.printStackTrace();  
        }  
    }  
}


类别:经验总结 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu