• 使用SAX解析xml文档


    1.首先,在main方法中解析xml文档,具体代码如下:

    import org.w3c.dom.*;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    public class Main {
    
        public static void main(String[] args)  throws Exception {
            //创建一个文档解析器工厂
            SAXParserFactory factory=SAXParserFactory.newInstance();
            SAXParser parser=factory.newSAXParser();
    
            Handler handler=new Handler();
            parser.parse("src/server.xml",handler);
        }
    }

    其中,解析时parser.parse("src/server.xml",handler);第一个参数是xml文档的地址,第二个参数是具体的以什么规则解析这个xml文档。

    2.重写Handler类,以自由操纵如何具体的解析xml文档的具体值

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class Handler extends DefaultHandler {
    
        //全局变量用于存储书籍的编号
        int bookIndex=0;
        /*开始解析文档*/
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            System.out.println("开始解析文档");
        }
        /*结束解析文档*/
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
            System.out.println("结束解析文档");
        }
        /*解析文档中所有的开始标签*/
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            //开始解析book元素的属性
            if("book".equals(qName)){
                bookIndex++;
                System.out.println("==========开始解析第"+bookIndex+"本书============");
                //输出book元素的id属性,已知属性名,根据属性名获取属性值
                //System.out.println("book的属性值是"+attributes.getValue("id"));
    
                //不知道属性名,只能遍历所有属性
                int num=attributes.getLength();
                for(int i=0;i<num;i++){
                    System.out.print("第"+(i+1)+"个属性名是"+attributes.getQName(i));
                    System.out.println(" 第"+(i+1)+"个属性值是"+attributes.getValue(i));
                }
            }
            if(!qName.equals("book")&&!qName.equals("")){
                System.out.println(qName);
            }
    
        }
        /*解析文档中所有的结束标签*/
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if("book".equals(qName)) {
                System.out.println("============结束解析第" + bookIndex + "本书==========");
            }
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            String s=new String(ch,start,length);
            s=s.trim();
            if(!s.equals("")){
                System.out.println(s);
            }
    
        }
    }
  • 相关阅读:
    Unity 自定义日志保存
    一万字详解 Redis Cluster Gossip 协议
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解
    数组小游戏---火把萤石
    11个编程接单的网站,你有技术就有收入,有收入就有女朋友《男盆友》
    逆向工程,调试Hello World !程序(更新中)
    魔改一波合成大西瓜!代码已开源~
    如何使用C++做个简单推箱子游戏
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解
    zookeeper应用
  • 原文地址:https://www.cnblogs.com/xiaoao/p/9630263.html
Copyright © 2020-2023  润新知