您的位置:首页 > 其它

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">

<作者>曹雪芹</作者>

</红楼梦>

</四大名著>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐