java 解析 xml 笔记

imooc 网上xml 解析课程笔记

初识xml

    表现:以 .xml 为文件扩展名的文件
    存储:树形结构
    为什么用xml:   1、不同应用程序之间通信? 订票软件 支付软件
            2、不同平台的通信 ?  mac os  windows
            3、不同平台间数据的共享? 网站 手机app
        用相同的xml把不同的平台链接起来

    常用节点类型
         节点类型    nodeName 返回值        nodeValue 返回值
        1:element    element name        null
        2:attr        属性名称        属性值
        3: text        #text             节点内容
    例如:    <book id="1">
            <name>冰与火之歌</name>
        </book>
        book name 冰与火之歌 都是 element
        id="1"    是 attr
        之间换行空格就是 text
        

    注意:encoding="utf-8" 中 utf 小写

解析方式pk(整体)
    基础方法:DOM,SAX,不用导入jar包
        DOM平台无关的官方解析方式,不仅限与java
            一次读取所有内容
            优点:形成了树形结构,直观好理解,代码更容易编写
                  解析过程中树结构保留在内存中,方便修改
            缺点:DOM解析 xml文件十分大的时候,占用内存,会发生内存溢出

        SAX java 平台提供的解析方式,基于事件驱动的解析方式
            一步步解析,首先对 <?xml?> 触发 startDocument() 方法
                    然后对后面开始节点 <> 触发 startElement() 方法
                    对后面结束节点 </>触发 endElement() 方法
                    最后节点触发 endDocument() 方法
            优点:采用事件驱动模式,对内存耗费小
                  使用只需要处理xml中数据
            缺点:不易编码,难同时访问一个xml中多处不同数据
            
    扩展方法:JDOM、DOM4J,在 SAX 基础上扩展而来,只能在 java 平台上
        JDOM:仅使用具体类不使用接口,API大量使用了 Collections 类
        DOM4J:JDOM 的一种智能分支,合并许多超出基本xml文档表示的功能
               使用接口和抽象基本类方法,是个优秀的 java CML API
               性能优异、灵活性好、功能强大和极端易用使用的特点
        DOM4J 性能高于 JDOM

解析xml文件:java 程序中读取 xml 文件的过程
解析目的:获取节点名、节点值、属性名、属性值

DOM 方式解析xml 步骤
    准备工作:
          DocumentBuilderFactory:创建一个 DocumentBuilderFactory 对象
          DocumentBuilder :       创建一个 DocumentBuilder 对象
          Document :          通过 DocumentBuilder 对象的 parse(String fileName) 方法方法加载 xml 文件到 Document
    遍历节点:
           NodeList :        通过document.getElementsByTagName(String) 获取所有节点的集合 NodeList
          Node :        通过 nodelist.item(int) 索引值获得一个节点 Node ( nodelist 的索引值从 0 开始)
    
    遍历节点属性:        
           NamedNodemap:    通过 Node.getAttributes() 获取 node 节点所有属性集 NamedNodemap
          node:            通过 NamedNodemap.item() 方法获取 book 某一个属性 node
          属性名、属性值:    node.getNodeName()、node.getNodeValue()
          节点有且只有一个 属性,不需遍历 Element book = (Element)bookList.item(i);
                            book.getAttribute("id");
    遍历节点子节点; 空格换行也算一个text子节点,名称为#text
          NodeList :         通过NodeList childnodes = Node.getChildNodes()获得子节点
                    或者用getTextContent(),把该节点下所有子节点

SAX 解析原理
    Handler 遍历,startElement 开始,endElement 结束
    准备工作:
          SAXParserFactory    创建一个 factory 实例
          SAXParser          创建一个 parser 实例
          Handler        创建一个类继承 DefaultHandler ,重写一些方法进行业务处理并创建这个实例
        parser.parse("books.xml", handler);加载解析文件
    startElement() 遍历<>标签及属性值
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值