zoukankan      html  css  js  c++  java
  • XML的解析方式(Java)

    dom方式解析
      根据XML的层级结构在内存中分配一个树形结构,把XML的标签、属性和文本都封装成对象
      优点:如果很方便实现增删改操作
      缺点:如果文件过大,会造成内存溢出
     
    sax方式解析
      采用事件驱动,边读边解析
      从上到下,一行一行的解析,解析到某一个对象,返回对象名称
      优点:如果文件过大,不会早晨该内存溢出,方便实现查询的操作
      缺点:不能实现增删改操作
     
    jaxp解析器在jdk的javax.xml.parsers包里面
      四个类,分别针对dom和sax解析使用的类
      dom:
        DocumentBuilder:解析器类
          通过DocumentBuilderFactory.newDocumentBuilder()获取
          parse("xml路径")返回的是Document接口,父接口为Node
     
      Document中的方法
        getElementsByTagName(String tagName)
          得到标签,返回集合 NodeList
        createElement(String tagName)
          创建标签
        createTextNode(String data)
          创建文本
        appendChild(Node new Child)
          把文本添加到标签下面
        removeChild(Node oldChild)
          删除节点
        getParentNode()
          获取父节点
        NodeList接口
          getLength() 得到集合的长度
          item(int index) 下标取到具体的值
          getNodeName() 获取节点名称
          getTextContent() 获取节点内容
     
      DocumentBuilderFactory:解析器工厂
        通过DocumentBuilderFactory.newInstance()获取
     
      sax:
        SAXParserFactory:解析器工厂
          通过SAXParserFactory.newInstance()获得
        SAXParser:解析器类
          通过SAXParserFactory.newSAXParser()获得
     
          parse(File f, DefaultHandler dh)
            f xml路径
            dh 自动执行
              startElement(String uri, String localName, String qName, Attributes attributes)
              characters(char[] ch, int start, int length)
              endElement(String uri, String localName, String qName)
              当解析到开始标签时,执行startElement(),返回qName标签名称
              当解析到文本内容时,执行characters(),通过String的构造方法返回内容的那个解析到结束标签时,执行endElement(),返回qName标签名称
            创建一个类继承DefaultHandler,并重写3个方法
     
    使用dom4j解析
      获取Document接口
        SAXReader reader = new SAXReader();
        Document document = reader.read(path);
      Document的父接口是Node
        getRootElement():获取根节点,返回Element
      Element是一个接口,父接口为Node
        getParent():获取父节点
        addElement():添加标签
     
    dom4j支持xpath操作
      可以直接获取到某个元素
      语法:
        /AAA/BBB/CCC:表示一层一层的,AAA下的BBB下的CCC
        //BBB:所有的BBB
        //*:所有的元素
        //BBB[1]:第一个BBB元素
        //BBB[last()]:最后一个BBB元素
        //@id:有id属性的元素
        //BBB[@id]:有id属性的BBB元素
        //BBB[@id='b1']:id属性值为b1的BBB元素
      dom4j默认不支持xpath,需要引入jaxen的jar包
      selectNode() 查询节点集合,返回List集合
      selectSingleNode() 查询单个节点,返回Node接口
  • 相关阅读:
    poj 1061 (扩展欧几里德算法)
    字符串 (扫一遍 + 计数)
    快排 + 二分
    勾股定理
    WD
    Acmer--弱水三千,只取一瓢
    朱光潜给青年的十二封信 之 谈升学和选课
    朱光潜给青年的十二封信 之 谈读书
    小白书--求 n!
    N阶行列式---常见的几种运算
  • 原文地址:https://www.cnblogs.com/linyisme/p/5865154.html
Copyright © 2011-2022 走看看