XML----SAX解析XML文件
2013-11-01 08:22
316 查看
[java] view
plaincopy
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest {
@Test
public void test() throws ParserConfigurationException, SAXException,
IOException {
// 创建定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。
// 使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
// 通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
// parse(File f, DefaultHandler dh)使用指定的 DefaultHandler(缺省处理程序)
// 将指定文件的内容解析为 XML。
sp.parse(new File("src//sax//sida.xml"), new MyDefaultHandler());
}
// 创建内部类,继承DefaultHandler(缺省处理程序)并重写程序执行中用到的方法
class MyDefaultHandler extends DefaultHandler {
// 定义开关,用来开启一些方法
boolean flag = false;
@Override
// 重写文档的开始方法,这个方法在装载文档的时候会首先执行
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("startDocument");
}
@Override
/* 重写接收元素开始的通知。 ,当解析出来元素时会调用这个方法
uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
// 创建约束条件,只有符合约束的元素才会进入方法,
// qName应该是元素对象的名称
if ("作者".equals(qName)) {
flag = true;
System.out.println("startElement");
}
}
@Override
// 接收元素中字符数据的通知。
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
// 首先判断控制开关是否打开
if (flag) {
// 输出元素对象,即两个标签之间所标注的文本内容(相当于DOM解析中的getNodeValue();操作)
System.out.println(new String(ch, start, length));
}
}
@Override
// 接收元素结束的通知。
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
// 判断操作的标签对象是否符合规范
if ("作者".equals(qName)) {
System.out.println("endElement");
// 关闭方法开关
flag = false;
}
}
@Override
// 接收文档结束的通知。
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
//当文档加载完毕时操作此方法
System.out.println("endDocument");
}
}
}
XML文件
[html] view
plaincopy
<!DOCTYPE 四大名著[
<!ELEMENT 四大名著 (西游记,红楼梦)>
<!ATTLIST 西游记 id ID #IMPLIED>
]>
<四大名著>
<西游记 id="x001">
<作者>吴承恩</作者>
</西游记>
<红楼梦 id="x002">
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
plaincopy
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest {
@Test
public void test() throws ParserConfigurationException, SAXException,
IOException {
// 创建定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。
// 使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
// 通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
// parse(File f, DefaultHandler dh)使用指定的 DefaultHandler(缺省处理程序)
// 将指定文件的内容解析为 XML。
sp.parse(new File("src//sax//sida.xml"), new MyDefaultHandler());
}
// 创建内部类,继承DefaultHandler(缺省处理程序)并重写程序执行中用到的方法
class MyDefaultHandler extends DefaultHandler {
// 定义开关,用来开启一些方法
boolean flag = false;
@Override
// 重写文档的开始方法,这个方法在装载文档的时候会首先执行
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("startDocument");
}
@Override
/* 重写接收元素开始的通知。 ,当解析出来元素时会调用这个方法
uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
// 创建约束条件,只有符合约束的元素才会进入方法,
// qName应该是元素对象的名称
if ("作者".equals(qName)) {
flag = true;
System.out.println("startElement");
}
}
@Override
// 接收元素中字符数据的通知。
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
// 首先判断控制开关是否打开
if (flag) {
// 输出元素对象,即两个标签之间所标注的文本内容(相当于DOM解析中的getNodeValue();操作)
System.out.println(new String(ch, start, length));
}
}
@Override
// 接收元素结束的通知。
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
// 判断操作的标签对象是否符合规范
if ("作者".equals(qName)) {
System.out.println("endElement");
// 关闭方法开关
flag = false;
}
}
@Override
// 接收文档结束的通知。
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
//当文档加载完毕时操作此方法
System.out.println("endDocument");
}
}
}
XML文件
[html] view
plaincopy
<!DOCTYPE 四大名著[
<!ELEMENT 四大名著 (西游记,红楼梦)>
<!ATTLIST 西游记 id ID #IMPLIED>
]>
<四大名著>
<西游记 id="x001">
<作者>吴承恩</作者>
</西游记>
<红楼梦 id="x002">
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
相关文章推荐
- Java之xml文件解析二(SAX方式解析xml文件)
- Android开发小知识-XML文件解析之SAX(Simple API for XML)
- 解析XML文件(SAX方式解析XML)
- xml文件--SAX方式解析xml文件
- 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)
- 【Android网络开发の2】XML之SAX方式 解析和生成XML文件
- 【Java编程】SAX XML Parser解析、生成XML文件
- 解析xml文件时,错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" se
- android学习——使用SAX、DOM 和 PULL 解析xml文件,及使用pull生成xml文件
- java的xml学习[使用SAX解析XML文件]
- android用SAX解析xml文件时抛出org.apache.harmony.xml.ExpatParser$ParseException异常的解决方法
- android解析xml文件的SAX方式:Simple API for XML
- android_xml解析之 使用SAX读取XML文件
- 解析xml文件时,错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" set by the Application.的解决办法
- 安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件
- Java乔晓松-使用SAX,DOM,pull解析XML文件以及pull解析生成xml文件
- 【慕课笔记】3-2 应用SAX方式解析XML—使用SAX解析XML文件的节点属性
- 【Java编程】SAX XML Parser解析、生成XML文件
- XML解析之SAX方式解析xml文件
- 【慕课笔记】3-3 应用SAX方式解析XML—使用SAX解析XML文件的节点名和节点间文本