天天看点

jaxp通过sax方式解析xml文件简述:xml文件如下:java代码

简述:

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)
            throws 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;
    }

}