您的位置:首页 > 其它

jaxp通过sax方式解析xml文件

2017-02-21 16:31 295 查看

简述:

sax解析为事件驱动,我们通过继承DefaultHandler这个类,覆写其中的三个方法,startElement(),endElement(),character(),这三个方法,会随着sax解析自动执行,例如startElement()方法,解析到开始标签时,会自动启动。

xml文件如下:

(p1.xml)

<?xml version="1.0" encoding="UTF-8"?>
<person >
<p1>
<name>AAA</name>
<age>20</age>
</p1>
<p1>
<name>BBB</name>
<age>99</age>
</p1>
</person>


java代码

MyDefault1类:把整个XML文件输出到屏幕

Mydefault2类:获取全部name标签的值

package xxy.testJaxp.sax;
import java.io.IOException;
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;

/**
* @author 许湘扬 2017-2-21
* @说明   使用jaxp对xml进行进行sax解析
*/
public class testJaxp
{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
{
//1、创建解析工厂
SAXParserFactory saxParseFactory=SAXParserFactory.newInstance();
//2、创建解析器
SAXParser saxParser=saxParseFactory.newSAXParser();
//3、执行parse方法
saxParser.parse("src/p1.xml", new MyDefault1());
saxParser.parse("src/p1.xml", new Mydefault2());
}
}
/*
* 继承DefaultHandler类,来实现xml文件的输出到屏幕
*/
class MyDefault1 extends org.xml.sax.helpers.DefaultHandler
{

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
System.out.print("<"+qName+">");
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
System.out.print(new String(ch,start,length));
}
public void endElement(String uri, String localName, String qName)
th
ac7c
rows SAXException
{
System.out.print("</"+qName+">");
}
}
/*
* 继承DefaultHandler类,来实现获得所有name元素的值
*/
class Mydefault2 extends DefaultHandler
{
//判断位,保证只输出name标签的值
boolean flag=false;
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
if (qName.equals("name"))
flag=true;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
if (flag==true)
System.out.println(new String(ch,start,length));
}
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if (qName.equals("name"))
flag=false;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: