首页 > 代码库 > 使用SAX解析XML

使用SAX解析XML

在java编程中,我们经常要用到xml来存储数据,而我们要得到xml中的数据,就要对xml进行解析。下面是用SAX解析xml的例子,

一般步骤:

1、创建SAXParserFactory对象; SAXParserFactory spf = SAXParserFactory.newInstance();

2、使用上面创建的工厂对象创建SAXParser解析对象;SAXParser sp = spf.newSAXParser();

3、创建SAXHandler处理器,而这个SAXHandler类要继承DefaultHandler,自己重新编写其中的方法,主要有public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException{ } 这个方法是在读取xml数据的节点元素开始时触发,需要实现这个方法进行标记元素的名字的操作; public void characters(char[] ch, int start, int length)throws SAXException{ } 这个方法可以处理节点之间的数据;  public void endElement(String uri, String ocalName, String qName)throws SAXException { } 这个方法在处理节点元素终止时触发,可添加代码来将节点数据进行存储。

 

下面就是具体的解析例子

person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <name>CIACs</name>
    <address>
        <country>china</country>
        <province>guangdong</province> 
    </address>  
    <cnblogs>http://www.cnblogs.com/zhi-hao/</cnblogs>
</persons>

 

Sax.java

 

import java.io.File;

import java.io.FileReader;

import java.util.Hashtable;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

 

public class Sax {  

public static void main(String[] args)

 {        

 try   {  

 File file = new File("person.xml");      

FileReader reader = new FileReader(file);   

SAXParserFactory spf = SAXParserFactory.newInstance();//创建SAXParserFactory      

SAXParser sp = spf.newSAXParser();//创建SAXParser      

SAXHandler handler = new SAXHandler();//创建自己继承DefaultHandler实现的SAXHandler处理器       

sp.parse(new InputSource(reader), handler);//对xml进行解析      

Hashtable table = handler.gettable();   

//对xml的数据进行输出   

System.out.println("name: "+table.get("name"));   

System.out.println("adderss:");   

System.out.println("country: "+table.get("country")+" province: "+table.get("province"));   

System.out.println("cnblogs: "+table.get("cnblogs"));           

 }   

catch(Exception e)   

{        e.printStackTrace();   }            

 }

}

 

//实现自己的定义的SAXHandler类

class SAXHandler extends DefaultHandler

{  

private String currentElement;  

private String currentValue;  

private Hashtable table = new Hashtable();//存储xml中的数据      

@Override  public void startElement(String uri, String localName, String qName,    Attributes attributes) throws SAXException  

{   

currentElement = qName;  

}  

@Override  public void characters(char[] ch, int start, int length)    throws SAXException  

{      

currentValue = http://www.mamicode.com/new String(ch,start,length);

}  

@Override  public void endElement(String uri, String localName, String qName)    throws SAXException  

{   

if(currentElement.equals(qName))   

{        

table.put(currentElement, currentValue);//把xml中的数据放到table中  

 }

 }    

public Hashtable gettable()  

{   

return table;  

}

}

 

输出结果

 
一起学习,共同进步!