zoukankan      html  css  js  c++  java
  • java解析xml文件-DOM/SAX

    java解析xml文件的两种方式

    1:DOM

    原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存

    一个简单的xml

     使用java解析

    //builder工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            try {
                //builder
                DocumentBuilder builder = factory.newDocumentBuilder();
                //解析xml文档
                Document doc = builder.parse("src/xmls/demo.xml");
                //根据标签名得到元素
                NodeList list = doc.getElementsByTagName("student");
                //因为只有一个student 所以获取第一个
    //          Node node=list.item(0);
                //element继承自node
                Element student = (Element) list.item(0);//第一个元素
                //姓名
                Element name = (Element) student.getElementsByTagName("姓名").item(0);
                String nameValue = name.getFirstChild().getNodeValue();
                //年龄
                Element age = (Element) student.getElementsByTagName("age").item(0);
                String ageValue = age.getFirstChild().getNodeValue();
                System.out.println(ageValue);
                //性别
                Element sex = (Element) student.getElementsByTagName("sex").item(0);
                String sexValue = sex.getFirstChild().getNodeValue();
                String attib = sex.getAttribute("id");
                System.out.println(sexValue);
                System.out.println(attib);
            } catch (Exception e) {
                e.printStackTrace();
            }

    节点 属性 文本 都可以拿到了,复杂的xml也是使用这么几个方法。

    2. sax

    只能read 不能edit 相对于DOM方式来说 不会占用太多的内存, 对xml文档进行顺序扫描,有事件发生  

    输出结果:

    public class SaxDemo 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);
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            System.out.println("元素结束。。。"+qName);
        }
    
        /**
         * 文本结点
         * @param ch
         * @param start
         * @param length
         * @throws SAXException
         */
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
        System.out.println(new String(ch,start,length));
        }
    
        public static void main(String[] args) {
            SAXParserFactory factory =SAXParserFactory.newInstance();
            SAXParser parser= null;
            try {
                parser = factory.newSAXParser();
                try {
                    parser.parse("src/xmls/demo.xml",new SaxDemo());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            }
    
        }
    找到那个感觉 就算打开了那个脑洞

    本文来自博客园,作者:xiao~xiao,转载请注明原文链接:https://www.cnblogs.com/angin-iit/p/14010569.html

  • 相关阅读:
    模型驱动自动化测试框架
    TestPartner脚本错误处理的例子
    学习《Selenium 1.0 Testing Tools》
    自动化测试视频【持续更新】
    《软件测试基本功》系列教程
    自动化测试的误解与自动化测试的好处
    广州自动化测试实战训练系列课中的《QTP工具应用实战》课程PPT
    零基础QTP自动化测试训练
    Selenium结合FESTSwing测试Applet
    TestPartner自动化测试培训大纲
  • 原文地址:https://www.cnblogs.com/angin-iit/p/14010569.html
Copyright © 2011-2022 走看看