首页 > 代码库 > 使用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;
}
}
输出结果