zoukankan      html  css  js  c++  java
  • Java中对xml的解析

    Java中对xml的解析

    1.Dom4j

    Dom解析原理:xml解析器一次性将xml文档加载到内存中,然后在内存中构建一颗Document对象树。在通过Document对象得到树上的节点对象,通过节点对象操作文档内容。

     Dom4J 常用的对象: 

     SAXReader:读取 xml 文件到 Document 树结构文件对象 

     Document:是一个 xml 文档对象树,类比 Html 文档对象。 

     Element:元素节点。通过 Document 对象可以查找单个元素 

    使用步骤:

    导入 Dom4J.jar 包 dom4j-1.6.1.jar )

    1.创建SaxReader解析器

              SAXReader Reader = new SAXReader();

    2.通过read方法获得Document对象

              Document document = Reader.read("conf/student.xml");
    3.获得根节点

      Element rootEle = document.getRootElement();

    4.4.通过迭代器遍历xml文档

    Iterator it = rootEle.elementIterator();

    while (it.hasNext()) {

    Element stusEle = (Element) it.next();

    Iterator it01 = stusEle.elementIterator();

    while (it01.hasNext()) {

    Element stuEle = (Element) it01.next();

    System.out.println(stuEle.getStringValue());

    }

    System.out.println("--------------------------------");

    }

    Dom4j官方文档中有quick start 可以帮助我们快速使用该技术!

    2.SAX

    Sax解析工具是sun公司提供的,内至于jdk中。Org.xml.sax.*;

    sax解析原理:事件驱动,边读边写

    当遇到开始标签时,自动调用startElement(String url,String localName,String qname,Attribute attribute)方法;当遇到文本时,自动执行characters(char[]ch,int start,int length);当遇到结束标签时自动执行endElement(String url,String localName,String qName)方法。

    <结束标签以’/’作为标志,结束方法比开始方法只少一个attribute 参数>

    使用步骤:

    1.创建解析工厂

    //SAXParserFactory 构造方法被保护,只能通过 .newInstance()方法创建实例

    SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

    2.创建解析器

    //通过工厂创建解析器

    SAXParser saxParser = saxParserFactory.newSAXParser();

    3.执行parser方法

    // 执行 parser 方法,传入两个参数:xml 文件路径、事件处理器 

    saxParser.parse("conf/student.xml", new MyDefaultHandler());

    所谓事件处理器是指 一个继承与 DefaultHandler 的类,进行重写其中的startElement()characters()endElement()方法实现相应的处理。

     创建一个类,继承 DefaultHander 类,重写三个方法: 

    A、 startElement 获取开始标签,重要的两个参数说明 

    a、 qName:把标签名称返回 

    b、 attributes:返回标签中的属性对象 

    B、 character  获取标签文本内容 

    C、 endElement  获取结束标签  

    ============DOM解析    vs   SAX解析 ========

    DOM解析

    SAX解析

    原理: 一次性加载xml文档,不适合大容量的文件读取

    原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

    DOM解析可以任意进行增删改成

    SAX解析只能读取

    DOM解析任意读取任何位置的数据,甚至往回读

    SAX解析只能从上往下,按顺序读取,不能往回读

    DOM解析面向对象的编程方法(NodeElementAttribute,Java开发者编码比较简单。

    SAX解析基于事件的编程方法。java开发编码相对复杂。

    3.XPath 

    主要是用于快速获取所需的节点对象。

    选择节点:XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着

    路径或者 step 来选取的。下面列出了最有用的路径表达式: 

    表达式 描述 

    nodename  选取此节点的所有子节点。 

    /  从根节点选取。 

    //      从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 

    .  选取当前节点。 

    ..  选取当前节点的父节点。 

    @  选取属性。   

    text()获取节点的文本内容函数 

    使用步骤:

    // 1.通过DocumentBuilderFactor创建解析工厂

    DocumentBuilderFactory builderFactory = DocumentBuilderFactory

    .newInstance();

    // 2.通过工厂获得解析器

    DocumentBuilder builder = builderFactory.newDocumentBuilder();

    // 3.通过parser方法获取Document

    Document document = builder.parse("conf/books.xml");

    // 4.获取xpath对象

    XPath xpath = XPathFactory.newInstance().newXPath();

    // 5.获取 bookstore 节点下 book 属性 category 值为 web 下的第二个title 节点的文本内容

    String exp = "/bookstore/book[@category='web'][2]/title/text()";

    String tit = (String) xpath.evaluate(exp, document,

    XPathConstants.STRING);

    System.out.println(tit);

    // 获取 bookstore 节点下 book 属性 category 值为 web 的 titile 属性为 en 的节点内容

    String expEn = "/bookstore/book[@category='web']/title[@lang ='en']/text()";

    String titEN = (String) xpath.evaluate(expEn, document,

    XPathConstants.STRING);

    System.out.println(titEN);

    // 获取 bookstore 下 book 属性 category 值为 cooking 的 title 的 lang 属性的值

    String expLan = "/bookstore/book[@category='cooking']/title/@lang";

    String lang = (String) xpath.evaluate(expLan, document,

    XPathConstants.STRING);

    System.out.println(lang);

    // 获取 bookstore 节点下所有 book 的节点集合(遍历该文档)

    String expB = "/bookstore/book";

    NodeList books =(NodeList) xpath.evaluate(expB, document, XPathConstants.NODESET);

    for (int i = 0; i < books.getLength(); i++) {

    Element book =(Element) books.item(i);

    String title =(String) xpath.evaluate("title/text()", book, XPathConstants.STRING);

    String author =(String) xpath.evaluate("author/text()", book, XPathConstants.STRING);

    String year =(String) xpath.evaluate("year", book, XPathConstants.STRING);

    String price =(String) xpath.evaluate("price", book, XPathConstants.STRING);

    System.out.println(title+" "+author+" "+year+" "+price);

    System.out.println("----------------------------------------------------");

    }

    4.在Dom4j中使用XPath

    开发中Dom4jXPath结合使用非常灵活,所以应用广泛!

    使用步骤:

    1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

    2)使用xpath方法

    List<Node>  selectNodes("xpath表达式");   查询多个节点对象

    Node       selectSingleNode("xpath表达式");  查询一个节点对象

                    //1.SAXReader解析器

    SAXReader reader = new SAXReader();

    //2.通过read方法获得Document

    Document document =reader.read("conf/bookstore.xml");

    //3.xpath路劲

    String titlePath ="/bookstore/book[1]/title";

    Element element  =(Element) document.selectObject(titlePath);

    String title =element.getStringValue();

    System.out.println(title);

  • 相关阅读:
    mybatis-generator.xml
    模板下载
    任务导出
    订单导出
    创建指定日期任务
    字符串的知识
    数组元素反转
    JVM 中知识
    Redis介绍
    JsonP
  • 原文地址:https://www.cnblogs.com/he-shao/p/5860932.html
Copyright © 2011-2022 走看看