欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SAX解析操作

程序员文章站 2022-05-28 08:31:43
...

SAX解析操作

如果要想使用SAX解析,首先需要编写一个SAX解析器,并且定义一个类,并使该类继承DefaultHandler类,同时覆写startDocument(),startElement(),endElement()和characters()方法
建立完SAX解析器之后,还需要建立SAXParserFactory和SAXParser两个类,可以通过SAXParserFactory的newSAXParser()方法创建SAXParser对象,之后通过SAXParser的parse()方法指定要解析的XML文件和制定的SAX解析器

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = factory. newSAXParser();
saxParser.parse(inputSource, new CustomizeSaxHandle());

其中,inputSource是要解析的文件,文件路径或文件输入流均可;new CustomizeSaxHandle()为新建的自定义sax解析器

public class CustomizeSaxHandle extends DefaultHandler {

    private Locator locator;

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.println(JSON.toJSONString(locator));
        System.out.print("<");
        System.out.print(qName);
        if (attributes != null) {
            for (int x = 0; x < attributes.getLength(); x++) {
                System.out.print("" + attributes.getQName(x) + "=\"" + attributes.getValue(x) + "\"");
            }
        }
        System.out.println(">");
    }

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

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

    @Override
    public void setDocumentLocator(Locator locator) {
        this.locator = locator;
    }
}

其中,startElement()方法中的qName指的是节点名称,attributes指的是标签中配置的属性值;而characters()方法中的ch指的是要解析的xml文件中的所有字符的字节数组,start和length组合使用可以截取每个标签对应的具体值;解析器中定义Locator locator;可以获取每个节点的位置