• XML


    1 XML入门

    1.1 引入

    HTML, 超文本标记语言。

    html语言语法是很松散的!

    1)标签不区分大小写的!

    2)标签可以不匹配的。

    w3c组织,针对html的语法缺陷,去设计了另一门,叫xml语言。

    html语言的标签是固定的。

    1.2 XML语言

    <NAME></NAME>

    XMLExtend Markup lanuage 可扩展标记语言。

           HTML                      XML

    概念          超文本标记语言        可扩展标记语言

    标记数量     是固定的                 是不固定的,可扩展的

    作用       负责网页的结构      1描述带关系的数据结构(作为软件的配置文件)

                      properties配置文件: 键值对  name=eric   password=123456

                      xml可以描述包含与被包含的关系。

                        <student>

                          <name></name>

                          <PASSWORD></PASSWORD>

                        </student>

                        <student>

                          <name></name>

                        </student>

                      配置使用场景:

                        1)框架(struts2 hibernatespring),xml作为框架的配 置文件

                              2tomcat服务器软件配置文件(web.xml server.xml

                      2装载数据(作为小型的“数据库”)。

    2 XML作用

    2.1 作为软件配置文件

    两台通讯条件;

      IP地址和端口

      java代码: 根据ip和端口连接数据库服务器(ip改动会改变代码)

    properties文件:

      ip=211.34.21.43

      port=20

    xml文件:

      <host-list>

        <host id="main">

          <ip> 211.34.21.43</ip>

          <port>20</port>

        </host>

        <host id="backup">

          <ip> 211.34.21.44</ip>

          <port>20</port>

        </host>

      </host-list>

      PC数据库服务器1oracle数据库  211.34.21.43     20

      PC数据库服务器2oracle数据库  211.34.21.44     20

    2.2 作为小型数据库

    教师管理系统      教师信息: 姓名  工龄  邮箱地址

    传输数据:

    字符串:  ||20|zhangsan@qq.com|.......|....  (格式不是行业规范的,不通用)

    xml格式:

      <teacher-list>

        <teacher>

          <name></name>

          <email></email>

          <workage></workage>

          ....

        </teacher>

        <teacher>

          <name></name>

          <email></email>

          <workage></workage>

          ....

        </teacher>

      <teacher-list>              xmlw3c组织的制定的标准)

    json格式  获取字符串,截取字符串数据。

    3 XML语法

    3.1 标签

    <student>学生</student>  

     注意:

    1)分带标签体的标签,也有空标签。

    2)标签是区分大小写

    3)标签一定要配对

    4)标签名字中间不能含有空格

    5)标签名字不能使用数字开头

    6)在同一个xml文件中,有且仅有一个根标签

    3.2 属性

    <student id="1"></student>

    注意:

    1)一个属性分为属性名和属性值。属性名和值之间使用=号分割。

    2)属性值一定要使用单引号或者双引号包含,不能省略,也不能单双混用!

    3)一个标签内可以包含多个属性,但是不能出现同名的属性

    3.3 注释

    <!--  xml --->

    3.4 文档声明

    <?xml version="1.0"  encoding="码表"?>

    version: xml的版本号

    encoding: 表示解析xml文件内容时使用的码表

    xml文件的编码问题:

    1xml文件内容保存的编码(另存为-》选择编码保存)

    2)解析xml文件内容的编码(   <?xml version="1.0" encoding="utf-8"?> )

    以上两个编码必须保存一致,才能避免中文乱码问题。

    注意:

    如果在ecplise开发工具上,编写xml文件,那么xml文件内容自动按照文档声明的encoding的编码保存,所以不会中文乱码问题.

    3.5 转义字符

    html的转义字符.

    3.6 处理指令(不用了,过时了)

    <?xml-stylesheet type="text/css" href="1.css"?>

    练习:

    通讯录程序

    联系人: 编号  姓名  性别  手机  地址  QQ

    要求:

    1)编写一个xml文件。(contact.xml,该文件描述联系人的信息

    2)该文件可以同时描述多个联系人。

    4 XML解析

    4.1 xml解析方式

    1DOM解析:

    2SAX解析

    3XPATH

    4.2 DOM解析的工具

    Sun官方jaxp工具

    jdom工具

    dom4j工具: 三大框架读取xml文件的程序。(非官方的,第三方的)

    dom for java

    iphone4s  iphone for steven   

    4.3 dom4j工具使用

    1)到dom4j的官方下载 。dom4j-1.6.1.zip

    2)导入dom4j的支持jar包、

    dom4j-1.6.1.jar核心包

    总结:

    xml解析

    dom解析方法: dom4j的工具

    查:

    标签: element("name")  

    elements("name")

    elements();

    getName() 标签名称

    getRootElement(): 根标签

    属性: atrributeValue("name")  属性值

    atrribute("name")  对象

    atrributes()  属性对象列表

    getName() : 属性名

    getValue() 属性值

    文本:

      getText();  当前标签的文本

      elementText("name")  子标签的文本

    增:

    DocumentHelper.createDocument()   文档

    addElement("name");   标签

    addAtribute"name","value" )  属性

    addText(“”);

    改:

    setValue()   修改属性值

    addAttribute(”同名“) 修改属性值

    setText()    修改文本内容

    删除:

    detach()   标签、属性

    getParent().remove(标签/属性)

    作业:

    编写一个通讯录程序

    功能需求:

    1)增加联系人

    2)修改联系人

    3)删除联系人

    4)查询所有联系人(全部)

    要求:

    1)交互使用控制台进行交互

    2)联系人的数据存储到xml文件中(contact.xml)  dom4j的操作)

    Demo1

    使用dom4j工具读取一个xml文件

    1)创建xml解析器对象

    2)读取xml文件

    Demo2

     使用dom4j读取xml的标签

          getRootElement(): 获取根标签

          getName(): 获取标签名称

          element("名称"): 获取第一个指定名称的子标签

          elements("名称"): 获取指定名称的所有的子标签

          elements(): 获取所有子标签

    1.1 读取根标签

    1.2 获取标签名称

    1.3 获取第一个子标签(根据指定的名称获取第一个子标签)

    1.4 获取所有子标签(根据指定的名称获取所有同名子标签)

    遍历List几种方式?

    1)传统for循环

    2)for-each循环

    3)迭代器

    1.4 获取所有子标签(不指定名称)

    Demo3

    使用dom4j获取xml上的属性信息

    1.1 在标签上获取属性值(根据属性名称获取对应的属性值)

    1.2 根据属性名称获取属性对象

    拿到标签对象

    拿到属性对象

    通过属性对象拿到 属性名

    通过属性对象拿到 属性值

    1.3 获取标签的所有属性对象

    Demo4

    使用dom4j获取xml的文本信息

     注意:

        xml文件中,空格和换行会作为xml的内容被解析到。

        xml中空格和换行和java代码中空格换行不一样。

        java代码中的空格和换行是没意义的,为了代码的格式格式好看而已。

    1.1 拿到所在标签上的文本内容getText

    1.2 通过父标签获取指定子标签的文本内容elementText

    Demo5

    使用dom4jxml文件的信息封装成对象

    2)创建List对象

    3)xml信息->list对象

    3.1 读取到所有contact标签

    3.2 创建Contact对象

    3.3 contact标签数据放入contact对象中

    3.4 contact对象放入list对象

    保存数据   list.add(对象)

    1 XPath技术

    1.1 作用 

    作用: 快速地查询到xml文件中节点。

    xml文件中的标签层次结构很深,那么如何来快速地定位到所需的标签呢?这就用到了xpath技术!!

    1.2 体验xpath技术 

    1)导入jaxen-1.1-beta-6.jar  dom4jxpath插件包

    2)在dom4j中使用xpath

    List<Node> list = selectNodes("xpath表达式")  查询多个节点

    Node node = selectSingleNode("xpath表达式")   查询一个节点

    1.3 xpath表达式(重点)

    /   绝对路径    斜杠在最前面,代表xml文件的根。斜杠在中间,表示子元素。

    //  相对路径    选择后代元素(不分层次结构)

    *   通配 选择所有元素

    [ ]   条件        选择什么条件下的元素。例如 /AAA/BBB[1] 选择第一个BBB子元素

    @   属性         选取属性

    =    内容 (值)  

    and  逻辑与

    text()   选取文本内容

     案例:

    "/student-list"; //根标签student-list

    "/student-list/student"; //student-list根标签下的student子标签

    "/student-list/*"; //选择根据标签student-list下的所有子标签

    "/student-list//*"; //选择根标签student-list下的所有后代标签(不分层次结构)

    "//name"; //选择所有name标签(不分层次)

    "//student/name"; //选择所有父标签是studentname标签

    "//student[1]";// 第一个student标签

    "//student[last()]";//最后一个student标签

    "//@id"; // 选择所有id属性

    "//student[@id]"; //选择所有包含id属性的student标签

    "//student[@id='002']"; //选择id属性值为002student标签

    "//name[text()='张三']";//文本内容为张三name标签

    2 SAX解析

    2.1 引入

    xml解析方法:

    dom解析:原理xml解析引擎一次性把整个xml文件加载进内存,在内存创建一颗document树。 

       问题:大文件的话,使用dom解析效率比较低,甚至会导致内存溢出。

    编码方式: 面向对象编程方式

    sax解析: 原理加载一点,读取一点,处理一点。优势:占用的内存比较小。

       编程方式:基于事件编程方式。

    2.2 SAX解析工具

    sun公司官方的sax解析工具。  在jdk中包含sax解析工具的apiorg.xml.sax.*;

    SAXParserFactory.newInstance().newSAXParser();

    extends DefaultHandler;

    2.3 SAX解析的开发步骤

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

    DOM解析

    SAX解析

    原理

    一次性加载进内存,构造docuemnt数,内存占用比较大

    加载一点,读取一点,内存占用相对小

    读取顺序

    可以读取XML文件任意位置信息,甚至往回读

    只能是从上往下依次读取,不能往回读

    操作方式

    可以进行查询,也可以进行修改

    只能查询

    编码方式

    面向对象编程方式,更加适合java开发者

    基于事件编程方式,相对java开发难理解

  • 相关阅读:
    吸取前人教训,每个程序员都曾犯过的经典错误,你可千万要避免
    程序员帮助妹妹攻破C语言,整理超详细规划,快来看!
    2020年总结:程序员爱用开发工具 Top 100
    程序员为了拿到N+1辞退金,使计让公司辞退自己,网友评论画风突变!
    回顾2020的爷青结:有哪些记忆里的应用正在消逝!
    菜鸟看过来!新的一年,这几点雷区别再踩了
    年龄从不是学习的界限,84岁高龄奶奶自学编程,受苹果公司CEO邀请参加全球开发者大会!
    TIOBE 2月编程语言排行榜出炉:C语言冠军宝座稳定,前十名有什么变化?
    用TensorRT和Numpy编写的Yolov5推理。在【Nvidia Jetson】设备上运行,无需依赖任何pytorch / torchvision
    Example app/api for exposing yolov5 model via flask
  • 原文地址:https://www.cnblogs.com/lldsgj/p/10801100.html
Copyright © 2020-2023  润新知