xml解析之sax解析

html分成两种发展一种是h5还有一种是XHTML,xhtml后发展出来xml即可扩展性标记语言。在此之前大多数采用property file来描述程序配置,但是property采用的是一种单一的平面层次结构,使用起来比较麻烦,并且要求键是唯一的,这样要存放一个值序列,则需要变通的方法。但是xml采用层次结构这样就更够比平面表结构更加灵活使用起来更加方便。当然xml文件也只是一种标记语言,其具体内容还需要我们自己分析。其中java库中提供了两种解析器一种是流机制解析器(Simple API for XML, SAX),还有一种是树形解析器(Document Object Model ,DOM)。以下是流解析器的使用方法:

首先编写xml文件:


    
        李宣霖
    

    
        24
    

处理工具:

public class Handel extends DefaultHandler{

    @Override
    public void startDocument() throws SAXException {
        System.out.println();
    }

    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.println("start");
        System.out.println(qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        System.out.println("end");
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        System.out.println(new String(ch,start,length));
    }
    
}

在方法characters中可得到相关的节点信息,在startElement中开始处理相关的节点信息。

public class Main {
    public static void main(String[] args) throws SAXException, IOException {
        SAXParserFactory factory=SAXParserFactory.newInstance();
        SAXParser parser;
        try {
            parser = factory.newSAXParser();
            parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("xml的SAX解析/web.xml"), new Handel());//需要将读取xml文件的流和处理方法。
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这样利用SAX解析xml文件配合之前的Tomcat机制就不必直接在WebApp类中写静态块将所有serverlet注入写死,可以动态地配置web.xml来达到相同的效果。

你可能感兴趣的:(java)