day07_02_XML解析思想

简介: day07_02_XML解析思想=============================================================================XML解析: 解析xml可以做: 1. 如果xml作为配置文件:读取数据。

day07_02_XML解析思想

=============================================================================
XML解析:
    解析xml可以做:
        1. 如果xml作为配置文件:读取数据。
        2. 如果xml作为传输文件:可写可读。
--------------------------------------
xml解析思想:
    DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
        优点:因为在内存中会形成dom树,可以对dom树进行增删改查。
        缺点:dom树非常占内存,解析速度慢。
--------------------------------------
    SAX:逐行读取,基于事件驱动(事件调方法)。
        优点:不占内存,速度快。
        缺点:只能读取,不能回写。        
--------------------------------------        
    DOM4J:是dom4j.org出品的一个开源XML解析包。DOM4J应用于Java平台,采用了Java集合框架并完全支持DOM、SAX和JAXP。
        DOM4J 使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。
        Dom:把整个文档作为一个对象。
        DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:
            
            Document    定义XML文档
            Element     定义XML元素
            Text        定义XML文本节点
            Attribute   定义XML的属性
            Comment     定义XML注释的行为
--------------------------------------
    xml常用的解析器JAXP:sun公司提供的解析。支持dom和sax。(不好用,sun自己都不用)
        JDOM:没火起来。
        DOM4J:(dom for java)民间方式,事实证明非常好用,支持dom。
            1. 导入jar包dom4j-1.6.1.jar
            2. 创建解析器
                SAXReader reader = new SAXReader();
            3. 解析xml获得document对象 
                Document document = reader.read(url); 
--------------------------------------
    示例解析XML(使用xml常用的解析器):
        1、得到某个具体的节点内容。例如:第2本书的书名 --> 葵花宝典
        2、遍历所有元素节点。
--------------------------------------
    XPATH:专门用于查询。
        定义了一种规则。
        常用的方法:
            selectSingleNode()
            selectNodes()
        使用步骤:
            1. 导包jaxen-1.1-beta-6.jar
            2. 创建解析器
                SAXReader reader = new SAXReader();
            3. 解析xml 获得document对象 
                Document document = reader.read(url);
--------------------------------------
    示例解析XML(使用xml的XPATH解析器):
        1、得到某个具体的节点内容。例如:第2本书的书名 --> 葵花宝典
        2、遍历所有元素节点。
--------------------------------------    
    XPath:
        nodename             选取此节点
        
        /AAA                 选择根节点AAA元素
        //BBB                选择所有AAA元素,而不考虑它们的位置
        //*                  全选(忽略深度)
        
        /AAA/BBB[1]          选择AAA的第一个BBB子元素
        /AAA/BBB[last[]]     选择AAA的最后一个BBB子元素
        ..                   选取当前节点的父节点
        
        //@id                选择所有的id属性
        //BBB[@id]           选择有id属性的BBB元素
        //BBB[not(@*)]       选择没有属性的BBB元素
        
        //BBB[@id='b1']      选择含有属性id值且其值为'b1'的BBB元素
        
        //*[count(BBB)=2]    选择含有2个BBB子元素的元素
        //*[count(*)=2]      选择含有2个子元素的元素
        
        //*[name()='BBB']    选择所有名称为BBB的元素(这里等价于//BBB)
=============================================================================    
<?xml version="1.0" encoding="UTF-8"?>

<书架>
    <书 出版社="黑马程序员">
        <书名>三国演义</书名>
        <作者>罗贯中</作者>
        <单价>20</单价>
        <批发价>10</批发价>
    </>
    <>
        <书名>葵花宝典</书名>
        <作者>东方不败</作者>
        <单价>15</单价>
    </>
</书架>
示例解析XML(使用xml常用的解析器)
 1 package com.itheima.dom4j;
 2 
 3 import java.util.List;
 4 
 5 import org.dom4j.Document;
 6 import org.dom4j.DocumentException;
 7 import org.dom4j.Element;
 8 import org.dom4j.Node;
 9 import org.dom4j.io.SAXReader;
10 import org.junit.Test;
11 
12 public class TestDom4j {
13     @Test
14     // 1、得到某个具体的节点内容。例如:第2本书的书名 --> 葵花宝典
15     public void test1() throws DocumentException {
16         SAXReader reader = new SAXReader(); // 创建一个xml解析对象
17         Document document = reader.read("src/Book.xml"); // 把xml文档加载到document对象中(即内存中)
18         Element root = document.getRootElement(); // 得到根节点
19         // Element bookNode = root.element("书");
20         // System.out.println(bookNode.getName()); //
21         List list = root.elements(); // 得到根节点的所有子节点
22         Element secondBook = (Element) list.get(1); // 得到第二本书对象
23         String name = secondBook.element("书名").getText(); // 得到当前节点的文本内容
24         System.out.println(name);
25     }
26 
27     @Test
28     // 2、遍历所有元素节点。
29     public void test2() throws DocumentException {
30         SAXReader reader = new SAXReader(); // 创建一个xml解析对象
31         Document document = reader.read("src/Book.xml"); // 把xml文档加载到document对象中(即内存中)
32         Element root = document.getRootElement(); // 得到根节点
33         treeWalk(root);
34     }
35 
36     private void treeWalk(Element ele) {
37         // System.out.println(ele.getName()); // 输出当前节点的名字(第一次递归的当前节点是根节点)
38         for (int i = 0; i < ele.nodeCount(); i++) { // ele.nodeCount() 得到当前节点的所有子节点的数量
39             Node node = ele.node(i); // 取出下标为i的节点
40             if (node instanceof Element) { // 判断当前节点是否为元素类型
41                 treeWalk((Element) node); // 是,把断当前节点node类型强转为元素Element
42             } else {
43                 System.out.print(node.getText());
44             }
45         }
46     }
47 
48 }
示例解析XML(使用xml的XPATH解析器)
 1 package com.itheima.dom4j;
 2 
 3 import java.util.List;
 4 
 5 import org.dom4j.Document;
 6 import org.dom4j.Node;
 7 import org.dom4j.io.SAXReader;
 8 import org.junit.Test;
 9 
10 public class TestXPath {
11     @Test
12     // 1、得到某个具体的节点内容。例如:第2本书的书名 --> 葵花宝典
13     public void test() throws Exception {
14         SAXReader read = new SAXReader();
15         Document document = read.read("src/Book.xml");
16         Node node = document.selectSingleNode("/书架/书[2]/书名"); // 类似于路径
17         System.out.println(node.getText());
18     }
19 
20     @Test
21     // 2、遍历所有元素节点。
22     public void test2() throws Exception {
23         SAXReader read = new SAXReader();
24         Document document = read.read("src/Book.xml");
25         List list = document.selectNodes("//*"); // 双反斜杠表示忽略深度的意思。单斜杠表示深度,更具体。
26         for (int i = 0; i < list.size(); i++) {
27             Node node = (Node) list.get(i);
28             System.out.println(node.getName() + "\t" + node.getText());
29         }
30     }
31 }

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
10天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
|
2月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
29 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
29天前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
1月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
72 0
|
1月前
|
XML 安全 API
Python读写XML文件:深入解析与技术实现
Python读写XML文件:深入解析与技术实现
42 0
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
108 1
|
1月前
|
XML JSON 数据格式
xml文档解析报错解决办法
xml文档解析报错解决办法
|
1月前
|
XML 数据格式
AXios接受XML格式的webservice并解析成数据格式
AXios接受XML格式的webservice并解析成数据格式
25 2
|
2月前
|
XML 存储 IDE
Java_XML解析精讲
Java_XML解析精讲
22 0

推荐镜像

更多