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());
        }
    }
  • 相关阅读:
    根据数据类型选择特征 select_dtypes(include=[]/exclude=[])
    quantile()
    concat()、merge()的区别
    json.dumps()和json.loads()
    Linux-top命令详解
    性能测试总结(一)---基础理论篇
    jmeter-常见问题及解决方法
    Jmeter之Bean shell使用(五)
    Jmeter-内存溢出原因及解决方法
    JMeter- JDBC Request
  • 原文地址:https://www.cnblogs.com/jecyhw/p/4531049.html
Copyright © 2011-2022 走看看