Java读取XML文件之SAX篇 (转载)
2007-07-19 17:52
435 查看
在XMLReader接受XML文档,并对读入的xml文件进行解析,解析开始之前,需要向XMLReader注册一个ContentHandler,也就是相当于一个事件监听器,在ContentHandler中定义了很多方法,当XMLReader读到合适的内容,就会抛出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应。
ContentHandler是一个接口,当处理特定的XML文件的时候,需要为其创建实现了此接口的类来处理特定的事件。而org.xml.sax.helpers.DefaultHandler类实现了此接口,所以我们只要继承DefaultHandler,并覆盖其中的方法即可。具体常用的几个方法在下面程序中有详细注释:
package xml;
import java.io.FileReader;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;;
public class SaxTest extends DefaultHandler{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
XMLReader xr=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
xr.setContentHandler(new SaxTest());
xr.parse(new InputSource(new FileReader("test.xml")));
}
//在文档开始的时候调用此方法
public void startDocument() throws SAXException {
System.out.println("startDocument: ");
}
//在文档结束的时候调用此方法
public void endDocument() throws SAXException {
System.out.println("enddocument: ");
}
//在遇到开始标签时调用此方法,
//其中参数中的namespaceURI就是名域,localName是标签名,qName是标签的修饰前缀,当没有使用名域的时候,这两个参数都未null。而atts是这个标签所包含的属性列表。通过atts,可以得到所有的属性名和相应的值
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("startElement: "+localName);
}
//遇到结束标签时调用此方法
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("endElement: "+localName);
}
//当遇到标签中的字符串时,调用这个方法,它的参数是一个字符数组,以及读到的这个字符串在这个数组中的起始位置和长度
public void characters(char[] ch, int start, int length) throws SAXException {
String data=new String(ch,start,length);
System.out.println(data);
}
}
当我们创建如下test.xml文件时
test.xml
-------------------
<?xml version="1.0"?>
<School>
<Student>
<ID>123456</ID>
<Address>408</Address>
<Name>wxm</Name>
<Sex>male</Sex>
</Student>
</School>
-------------------
运行程序,输出结果如下:
startDocument:
startElement: School
startElement: Student
startElement: ID
123456
endElement: ID
startElement: Address
408
endElement: Address
startElement: Name
wxm
endElement: Name
startElement: Sex
male
endElement: Sex
endElement: Student
endElement: School
enddocument:
----------------
END!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=574782
ContentHandler是一个接口,当处理特定的XML文件的时候,需要为其创建实现了此接口的类来处理特定的事件。而org.xml.sax.helpers.DefaultHandler类实现了此接口,所以我们只要继承DefaultHandler,并覆盖其中的方法即可。具体常用的几个方法在下面程序中有详细注释:
package xml;
import java.io.FileReader;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;;
public class SaxTest extends DefaultHandler{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
XMLReader xr=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
xr.setContentHandler(new SaxTest());
xr.parse(new InputSource(new FileReader("test.xml")));
}
//在文档开始的时候调用此方法
public void startDocument() throws SAXException {
System.out.println("startDocument: ");
}
//在文档结束的时候调用此方法
public void endDocument() throws SAXException {
System.out.println("enddocument: ");
}
//在遇到开始标签时调用此方法,
//其中参数中的namespaceURI就是名域,localName是标签名,qName是标签的修饰前缀,当没有使用名域的时候,这两个参数都未null。而atts是这个标签所包含的属性列表。通过atts,可以得到所有的属性名和相应的值
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("startElement: "+localName);
}
//遇到结束标签时调用此方法
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("endElement: "+localName);
}
//当遇到标签中的字符串时,调用这个方法,它的参数是一个字符数组,以及读到的这个字符串在这个数组中的起始位置和长度
public void characters(char[] ch, int start, int length) throws SAXException {
String data=new String(ch,start,length);
System.out.println(data);
}
}
当我们创建如下test.xml文件时
test.xml
-------------------
<?xml version="1.0"?>
<School>
<Student>
<ID>123456</ID>
<Address>408</Address>
<Name>wxm</Name>
<Sex>male</Sex>
</Student>
</School>
-------------------
运行程序,输出结果如下:
startDocument:
startElement: School
startElement: Student
startElement: ID
123456
endElement: ID
startElement: Address
408
endElement: Address
startElement: Name
wxm
endElement: Name
startElement: Sex
male
endElement: Sex
endElement: Student
endElement: School
enddocument:
----------------
END!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=574782
相关文章推荐
- [转载]JAVA高手解析XML配置文件的读取操作
- Java读取XML文件之SAX篇
- [Java] JDOM 读取 xml 文件 示例程序初步
- Java操作读取写入文本TXT及XML文件内容
- 【java】xml文件表建立及读取环境搭建并采用DOM4J完成XML文件导入到数据库
- 【java】common-configuration读取xml,properties文件&问题解决
- 在asp.net中读取XML文件信息的4种方法(转载)
- java读取xml文件
- java的文件xml读取,4种方式的不同
- java读取xml配置文件(sax)
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
- 用JAVA读取XML文件
- java读取xml配置文件
- JAVA 读取XML文件
- Java如何读取XML文件
- 转载 [Java]读取文件方法大全
- java读取xml文件内容
- 转载--从XML文件中读取数据绑定到DropDownList
- java将数据写入xml与读取xml文件数据
- java读取xml/.properties配置文件