您的位置:首页 > 其它

文章标题

2016-10-26 11:18 429 查看
1、很久没有写博客了,今天和大家分享一下关于SAX的心得,以及如何简单解析。

SAX简介

1、SAX适合处理数据流类型的数据,当碰到数据时,比如通过了<elelment1>在通过<element5>的时候,在此时前面一个已经丢失。
2、SAX的解析是将标签分为标签开始(startelement),标签结束(endelement),和字符串(character)的形式解析的。这三种方法以及其他的方法都继承类DefaultHandle.
3、方法的介绍:
startelement:当遇到开始标签的时候,自动调用该方法。
character:在标签中读取该标签内字符串
endelelment:当遇到结束时,自动调用该方法。


程序测验

XML文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架>
<书>
<书名>java开发大全</书名>
<作者>毛大大</作者>
<售价>19.9</售价>
<简介>这是一本牛逼的书</简介>
</书>

<书>
<书名>毛毛开发大全</书名>
<作者>郭大大</作者>
<售价>19.9</售价>
<简介>这是一本牛逼的书</简介>
</书>
</书架>


本代码是一个简单的xml,仅供测试之用。

SAX解析代码片:

一下的代码解析了整个xml文档,同时拿到了标签里面的内容。拿取方法相较于JAXP来说要简单很多。

package maomao;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
* 本测试为如何使用SAX解析器对XML文件进行解析
* @author Dale
*
*/
public class JaxpSaxTest {
public static void main(String[] args) {
try {
run1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void run1() throws Exception {
//SAX解析工厂类
SAXParserFactory spf = SAXParserFactory.newInstance();
//调取SAX解析器对象
SAXParser sParser=  spf.newSAXParser();
sParser.parse("src/book2.xml",new MyHandle());
}
}

/**
* 目的:获取作者标签,或者获取某标签
* @author Dale
*通过判断来达到效果
*/
class MyHandle1 extends DefaultHandler {

//定义一个全局变量作为标准变量,
private boolean flag = false;

public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
//qName是获取的标签名,通过equals方法进行对比
if ("作者".equals(qName)) {
flag=true;
}
}

public void characters(char[] ch, int start, int length)throws SAXException {
if (flag) {
//当flag为true时执行下面方法
String string= new String(ch,start,length);
System.out.println(string);
}
}

public void endElement(String uri, String localName, String qName)throws SAXException {
flag=false;
}

}
/**
MyHandle类继承DefaultHandle方法
需要重写方法startelement,endelement,character
**/

class MyHandle extends DefaultHandler{
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
//当读取到标签开头时,默认调用此方法
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.println("开始标签:"+qName);
}
//当读取到字符串时默认调用此方法
public void characters(char[] ch, int start, int length)throws SAXException {
String string =new String(ch,start,length);
System.out.println(string);
}
//读取到标签结束默认实现此方法
public void endElement(String uri, S
4000
tring localName, String qName)throws SAXException {
System.out.println("结束标签:"+qName);
}
public void endDocument() throws SAXException {
super.endDocument();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: