zoukankan      html  css  js  c++  java
  • Sax解析xml文档

    测试的xml数据:

    <?xml version="1.0" encoding="utf-8" ?>
    <note>
        <to>George</to>
        <from>John</from>
        <heading>Reminder</heading>
        <body>Don't forget the meeting!</body>
    </note>

    新建SaxTest类继承至DefaultHandle

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParserFactory;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    
    public class SaxTest extends DefaultHandler {
        @Override
        public void startDocument() throws SAXException {
            System.out.println("开始解析文档");
        }
    
        @Override
        public void endDocument() throws SAXException {
            System.out.println("解析文档结束");
        }
    
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            System.out.println(qName);//每个标签开始都会触发该事件,attributes是标签的属性
        }
    
        @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));//标签开始到标签结束之间的内容
        }
    
        static public void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
            String textXml = SaxTest.class.getResource("/").getPath() + "test.xml";
            FileInputStream inputStream = new FileInputStream(textXml);
            SAXParserFactory.newInstance().newSAXParser().parse(inputStream, new SaxTest());
        }
    }

    解析结果截图:

    其中characters方法需要特别注意,开始标签到结束标签的内容可能不止会触发一次characters事件,也就是说标签中的内容可能会多次触发characters事件,所以如果要获取标签内的完整内容需要特别小心,一般使用StringBuilder,如下代码。

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParserFactory;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    
    public class SaxTest extends DefaultHandler {
        StringBuilder stringBuilder = new StringBuilder();
    
        @Override
        public void startDocument() throws SAXException {
            System.out.println("开始解析文档");
        }
    
        @Override
        public void endDocument() throws SAXException {
            System.out.println("解析文档结束");
        }
    
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            System.out.println(qName);//每个标签开始都会触发该事件,attributes是标签的属性
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            System.out.println(stringBuilder.toString().trim());
            stringBuilder.delete(0, stringBuilder.length());//输出内容,并清空stringBuilder
    
            System.out.println(qName);//每个标签结束都会触发该事件
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            stringBuilder.append(ch, start, length);
        }
    
        static public void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
            String textXml = SaxTest.class.getResource("/").getPath() + "test.xml";
            FileInputStream inputStream = new FileInputStream(textXml);
            SAXParserFactory.newInstance().newSAXParser().parse(inputStream, new SaxTest());
        }
    }
  • 相关阅读:
    第二题:坦克游戏1.0(方法:动态规划)
    第一题:小鼠迷宫问题(方法:广搜)
    我的世界之电脑mod小乌龟 —— 方位上的操作 lua函数集
    NOIP 2011 提高组 选择客栈(vijos 1737)(方法:队列,数学)
    codeforces_1040_A Python练习
    codeforces_466_C Python练习
    codeforces_158_B Python练习
    三.Python_scrapy的Item对象 学习笔记
    二.Pyhon_scrapy终端(scrapy shell)学习笔记
    一.Python_srcrapy的命令行工具 学习笔记(Command line tool)
  • 原文地址:https://www.cnblogs.com/jecyhw/p/4531049.html
Copyright © 2011-2022 走看看