Skip to content
This repository was archived by the owner on Sep 26, 2024. It is now read-only.

Latest commit

 

History

History
286 lines (206 loc) · 7.47 KB

XML.md

File metadata and controls

286 lines (206 loc) · 7.47 KB

XML


XML

XML简介

XML指的是  可扩展标记语言 .

XML 具有平台无关性, 是一门独立的标记语言 ! XML具有自我描述性 , 主要应用于数据的存储 与 网络的数据传输 !

我们以后常用于 web项目的配置, 框架阶段学习时, 框架的配置 !

SE项目

题目#A#B#C#D

题目:

哈哈哈#哈哈哈

XML语法

1.  XML文档文件声明
在xml文件的第一行, 加入文档声明 , 描述当前XML版本 以及 文本的编码格式 !
<?xml version="1.0" encoding="UTF-8" ?>
  1. 节点 , 元素 , 标签 (指的是同一个东西)

    节点分为开始节点与结束节点 , 开始节点与结束节点之间是节点的内容!

    开始节点语法:<节点名称> 结束节点语法:</节点名称>

    例如: 描述一个电话号: <tel>18516955565</tel>

  2. XML文档中的节点, 允许嵌套, 不允许交叉

    例如: 描述一个人的通讯方式:            <comm> <tel>18516955565</tel> <qq>123456789</qq>        </comm>

  3. XML文档, 必须存在且只允许存在一个根标签

<persons> <person> <name>张大飞</name> <age>18</age> </person>
    &lt;person&gt;
        &lt;name&gt;张二飞&lt;/name&gt;
        &lt;age&gt;14&lt;/age&gt;
    &lt;/person&gt;
&lt;/persons&gt;
5. XML文档属性
属性名与属性值之间使用英文等号连接 , 
多个属性之间使用空格隔开
属性值, 必须使用双引号引住

格式: 

    &lt;开始标签 属性名1=&quot;属性值1&quot; 属性名2=&quot;属性值2&quot; ... n&gt;内容&lt;/结束标签&gt;
  1. 注释 多行注释:

    &lt;!-- 注释部分 --&gt;
    

XML文件案例:

<?xml version="1.0" encoding="UTF-8" ?>
<person>
    <!-- zhe li shi xing ming  -->
    <name>高飞</name>
    <age>18</age>
</person>

术语

1.  元素/节点/标签
    指的是同一个东西 !
  1. 根节点: 在一个XML中, 范围最大的 , 最外部的节点, 指的就是根节点

  2. 子节点/父节点 子节点与父节点的概念 ,是相对的 ! 例如如下案例中, person是name与age节点的父节点 ! 反过来说, name与age是person的子节点 <person> <name>高飞</name> <age>18</age> </person>

  3. 兄弟节点: 两个节点, 拥有同一个直接父节点

  4. 文本节点

    指的是XML标签中的纯文本

    例如: <person> <name>高天</name> <sex> </sex> <age>18</age> </person> 上面的案例中: 文本节点指的是:

    高天, ,18

练习:

使用XML , 描述一个学生student , 拥有四个子节点
-   school 学校
-   name 姓名
-   age 年龄
-   id 学号

<?xml version="1.0" encoding="UTF-8" ?> <student> <school>一本道精英学院</school> <name>高飞</name> <age>16</age> <id>东京热07组1001号学员</id> </student>

XML的Java解析

面试题:

Java中有哪些XML的解析方式, 分别有什么优点和缺点

答:

Java中存在4种XML解析方式(或者回答2种)

-   sax解析
    事件驱动机制 , 当解析器发现元素开始, 元素结束, 文本, 属性 等等时 , 发送事件, 通知程序员进行解析!

    事件驱动方式, 占用内存较低, 但是效率较差!

    优点:
        占用资源少
    缺点:
        效率差 , 文档解析时, 可读不可修改!


-   dom解析
    将整个文件, 加载到内存, 建立文档树模型 !

    缺点:
        在解析时,  会将整个文档, 加载到内存, 可能存在一些无用节点,  浪费内存 和 时间!

    优点: 
        将整个文档在内存中建立了树模型, 可以很方便的对内容进行删除和修改 !

-   JDOM解析
    -   属于DOM解析的封装
-   DOM4J解析
    -   属于DOM解析的封装

DOM4J解析流程

1.  引入dom4j.jar文件
  1. 在代码中, 通过输入流, 指向XML文件 一般情况下, XML文件, 建议存放在src目录下!

    InputStream is = Class.getClassLoader().getResourceAsStream("xxx.xml");

    注意: 以后在进行后台项目开发时, 客户端传递的数据, 一般情况下, 就在一个输入流中

  2. 创建XML的读取对象(SAXReader) , 用来读取XML流! SAXReader sr = new SAXReader();

  3. 通过读取对象的读取方法(read方法), 读取这个输入流! 并获取文档对象 Document doc = sr.read(is);

  4. 通过文档对象, 获取XML文档的根元素对象 Element root = doc.getRootElement();

  5. 通过Element的API 解析文件

Element 常用方法

-   获取当前节点的子节点迭代器
    方法名:    elementIterator
    无参数列表, 返回Iterator<Element>
  • 获取第一个匹配的直接子节点 方法名: element 参数列表: String tagName tagName: 要获取的子节点名称 返回值类型: Element

  • 获取节点名称 方法名: getName 无参数列表, 返回字符串,表示节点的名称 !

  • 获取节点值 方法名: getText 无参数列表, 返回字符串, 表示节点的文本内容

  • 设置节点值 方法名: setText 参数列表: String text text: 表示要设置的节点的值

  • 获取属性对象 方法名: attribute 参数列表: String 属性名称 返回值: Attribute 属性对象

  • 获取属性值 方法名: attributeValue 参数列表: String 属性名称 返回值: String 属性值

Attribute(属性) 常用方法

-   获取属性名称
    方法名: getName()
    无参数列表
    返回值: String name
  • 获取属性值 方法名: getValue() 无参数列表 返回值: String value

XPATH 解析XML ***

路径表达式:
  1. / 从根节点开始查找子节点

  2. // 从当前节点 查找子节点|间接子节点 *****

  3. . 选择当前节点

  4. .. 选择当前节点的父节点

  5. @ 选择属性 ***

使用XPATH路径表达式:

需要借助Node类型对象 (Node类型, 是一个接口, 是Attribute,Element,Document接口的父接口)

  1. 一次查询匹配的多个节点 方法名:selectNodes 参数列表: String 路径表达式 返回值: List集合,泛型为Node

  2. 一次查询匹配的第一个节点 方法名: selectSingleNode 参数列表: String 路径表达式 返回值:Node node

//data//item//title : 找到菜的标题

//data//item//tags : 菜的描述

XML的Java生成