【8】Dom4j和XPath

Dom4j

一、概述

1.功能

优秀的Java XML API,用来处理XML数据

2. 搭建Dom4j环境

导入dom4j-1.6.1.jar包

二、使用Dom4j

1.读取XML文件

  • 调用SAXreader的read方法获取Document对象
  • 调用Document对象的getRootElement方法获取根标签
  • 调用Element的getName获取标签名,getText获取标签文本

2.Element的获取方法

  • 子标签相关

    • element();element(“标签名”); ——>找到第一个符合的子标签

    • elements();elements(“标签名”); ——>找到符合的所有子标签List

    • elementIterator(); ——>获取所子标签性Iterator

    • elementText(“标签名”); ——>获取子标签文本

    • elementTextTrim(“标签名”); ——>获取去除所有空白的子标签文本

  • 属性相关

    • attribute(“属性名”); ——>获取属性
    • attributes(); ——>获取所有属性List
    • attributeIterator(); ——>获取所有属性Iterator
    • attributeValue(“属性名”); ——>获取属性值

三、使用XPath查找节点

1.概述

  • 功能:快速定位到XML中的节点
  • 导入jaxen-1.1-beta-6.jar包

2.使用

调用Document的方法

  • selectNodes(“定位用XPath表达式”,[排序用XPath表达式]) ——>返回List;
  • selectSingleNode(“定位用XPath表达式”) ——>返回Node;

3.XPath语法

  • 绝对路径查找

    • 以”/”开头,”/”代表Document对象
  • 相对路径查找

    • 以”.”代表当前节点,”..”代表当前节点的父节点
    • 在哪个节点对象上执行XPath,当前节点就是哪个节点
  • 全文搜索

    • 以”//”开头,通配前面的任意个节点
  • 属性节点前要加”@”

  • 谓语(附加条件)

    • 在节点后附加[谓语]
    • 允许写函数调用last()、count(节点)
    • 允许比较运算符
    • 允许and、or
    • 数字代表位置,从1开始

4.构建Document

  • DocumentHelper静态类[调用DocumentFactory.getInstance()]

    • createDocument(Element/空) ——>创建Document对象
    • createElement(QName/String) ——>创建Element对象
    • createAttribute(Element, QName, String) ——>创建Attribute对象
  • Element的添加方法[底层用DocumentFactory,双链表树]

    • add([int],Element)
    • addElement(String).setText(String)
    • addAttribute(String,String)
    • add(Attribute).setValue(String)
  • Element的删除方法

    • 调用父节点的remove(Node) ——>移除Element或Attribute
    • 调用自身的detach() ——>分离Element

5.Document输出为XML文件

  • XMLWriter

    • 创建XMLWriter对象
    • 传入一个流对象和输出编码(OutputFormat)
      • OutputStream ——>根据OutputFormat转换为BufferedWriter
      • FileWriter ——>当本地编码是UTF-8时才不会乱码,否则需要转换流
    • 调用XMLWriter的writer(Docuement)方法输出文件
    • 调用XMLWriter的close()方法关闭流
  • OutputFormat——>指定输出编码和文档声明的encoding

    • OutputFormat静态方法

      • createCompactFormat()压缩格式,无多余空白,方便网络传输
      • createPrettyPrint()漂亮格式,包含空白,方便查阅
    • setEncoding(String) ——>设置输出编码

你可能感兴趣的:(xml,dom,dom4j,xpath)