sax解析xml
xml
<?xml version="1.0" encoding="utf-8"?>
<!--引入dtd去约束该xml文件-->
<班级>
<学生 性别="男" 学号="sp001" 大哥="sp002 sp001" 地址="北京">
<名字>周星驰</名字>
<介绍>学习刻苦</介绍>
<年龄>23</年龄>
</学生>
<学生 性别="女" 学号="sp002" 大哥="sp001">
<名字>林青霞</名字>
<介绍>学习刻苦</介绍>
<年龄>23</年龄>
</学生>
</班级>
sax解析代码
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
*
*/
public class SaxXml {
/**
* @param args
* @throws Exception
* */
//使用sax解析xml
public static void main(String[] args) throws Exception{
//1、创建SAXParserFactory
SAXParserFactory spf=SAXParserFactory.newInstance();
//2、创建 SAXParser解析器
SAXParser saxParser=spf.newSAXParser();
//把xml文件与事件处理对象相连
saxParser.parse("src/myClass2.xml",new MyDefaultHandler2());
}
}
/**
*
*/
//事件处理类
class MyDefaultHandler extends DefaultHandler{
//发现文档开始
@Override
public void startDocument() throws SAXException {
System.out.println("文档开始");
super.startDocument();
}
//发现xml里的一个元素
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("元素名称="+qName);
super.startElement(uri, localName, qName, attributes);
}
//发现xml里面的文本
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content=new String(ch,start,length);
if (!content.trim().equals("")) {
System.out.println(new String(ch,start,length));
}
super.characters(ch, start, length);
}
//发现xml中一个元素结束
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
//发现文档结束
@Override
public void endDocument() throws SAXException {
System.out.println("结束文档");
super.endDocument();
}
}
class MyDefaultHandler2 extends DefaultHandler{
boolean isName=false;
boolean isAge=false;
//发现文档开始
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
//发现xml里的一个元素
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("名字")){
isName=true;
}else if(qName.equals("年龄")){
isAge=true;
}
super.startElement(uri, localName, qName, attributes);
}
//发现xml里面的文本
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content=new String(ch,start,length);
if (!content.trim().equals("")&&(isName||isAge)) {
System.out.println(new String(ch,start,length));
}
isName=false;
isAge=false;
super.characters(ch, start, length);
}
//发现xml中一个元素结束
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
//发现文档结束
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}