SAX解析XML文件-遍历

    @Test
    public void saxXml()
    {
        long startTime = System.currentTimeMillis();
        try
        {
            // step 1: 获得SAX解析器工厂实例
            SAXParserFactory factory = SAXParserFactory.newInstance();
            // step 2: 获得SAX解析器实例
            SAXParser parser = factory.newSAXParser();
            // step 3: 开始进行解析
            // 传入待解析的文档的处理器
            parser.parse(new File("E:\\a\\2018111412301.xml"), new MyHandler());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("运行时间:" + (endTime - startTime) + "ms");
    }

    class MyHandler extends DefaultHandler
    {
        private int count = 0;

        private String value;

        /**
         * @param uri        xml文档的命名空间
         * @param localName  标签的名字
         * @param qName      带命名空间的标签的名字
         * @param attributes 标签的属性集
         * @Description:标签(节点)解析开始时调用
         * @Date: 2018/12/13 13:08
         * @Method startElement
         * @Return void
         */
        @Override
        public void startElement(String uri,
            String localName, String qName, Attributes attributes)
        {
            //遍历整个xml文件
            System.out.println("<" + qName);
            int len = attributes.getLength();
            for (int i = 0; i < len; i++)
            {
                System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
            }
            System.out.println(">");

         /* 得到当前节点下的value值
            if ("cimNARI:SubControlArea.recordApp".equals(qName))
            {
                System.out.println("<" + qName);
                int len = attributes.getLength();
                for (int i = 0; i < len; i++)
                {
                    System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
                }
                System.out.println(">");
            }*/


            //得到当前节点的属性信息 节点信息:<cim:Substation rdf:ID="210000138">
          /*
            System.out.println("<" + qName);
           //当前节点 :cim:Substation
          if ("cim:Substation".equals(qName))
            {
                System.out.println("<" + qName);
                int len = attributes.getLength();
                for (int i = 0; i < len; i++)
                {
                    //当前节点属性的值:210000138
                    if ("210000138".equals(attributes.getValue(i)))
                    {
                        name = qName;
                        System.out.println(attributes.getQName(i) + "=" + attributes.getValue(i));//得到节点的属性信息
                    }
                }
                System.out.println(">");
            }*/
        }

        /**
         * @param ch     当前读取到的TextNode(文本节点)的字节数组
         * @param start  字节开始的位置,为0则读取全部
         * @param length 当前TextNode的长度
         * @Author:SunHongchen
         * @Description:解析标签的内容的时候调用
         * @Date: 2018/12/13 13:10
         * @Method characters
         * @Return void
         */
        @Override
        public void characters(char ch[], int start, int length)
        {
            String str = new String(ch, start, length);// 将当前TextNode转换为String
            if (!"\n".equals(str))
            {
                //value = str;
                System.out.print(str);//"当前节点中的值===>" +
            }
        }

        @Override
        public void endElement(String uri,
            String localName, String qName)
        {
            //得到当前节点下的value值
           /*
            if ("cimNARI:SubControlArea.recordApp".equals(qName))
            {
                System.out.println(value);
                count++;
                System.out.println(count);
            }*/
            //遍历整个xml文件
            System.out.println("</" + qName + ">");
        }

    }

猜你喜欢

转载自blog.csdn.net/qq_28773851/article/details/85002854