XML

XML

  • 概念:Extersible Markup Language,可扩展标记语言。

    • 可扩展:标签都是自定义的。

    • 功能:存储数据

      • 作为配置文件
      • 在网络中传输

      XML与HTML区别:

      ​ XML标签都是自定义的,HTML标签都是预定义的。

      ​ XML语法严格,HTML语法松散。

      ​ XML用于存储数据,XML用于展示数据。

      • W3C:万维网联盟
      • properties:配置文件,数据存储文件。
  • 基本语法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="utf-8" ?>

    <users>
    <user id="1">
    <name>张加林</name>
    <age>18</age>
    <gender></gender>
    </user>
    <user id="2">
    <name>张加林</name>
    <age>18</age>
    <gender></gender>
    </user>
    <user>
    <name>张加林</name>
    <age>18</age>
    <gender></gender>
    </user>
    <user id="3">
    <name>张加林</name>
    <age>18</age>
    <gender></gender>
    </user>
    </users>

    ?xml文档声明必须在第一行

    有且仅有一个根标签,属性值必须使用引号引起来(单双都可以)

    标签必须正确关闭

    xml标签区分大小写

    xml组成部分:

    ​ 文档声明

    ​ 1.格式:<?xml 属性列表 ?>

    ​ 2.属性列表:

    ​ version:版本号,必须的属性。

    ​ encoding::编码方式,告知解析引擎当前文档使用的编码方式,默认为ISO-8859-1。

    ​ standalone:是否独立,取值[yes|no]:是否依赖其他文件。

    ​ 指令

    ​ 结合CSS

    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version='1.0' encoding='utf-8' standalone='no' ?>
    <?xml-stylesheet type='text/css' hredf='a.css'>
    <users>
    <user>
    <name>张加林<name/>
    <age>20<age>
    <user>
    <users/>

    ​ 标签:标签名自定义。

  • 名称可以包含字母、数字以及其他的字符

  • 名称不能以数字或者标点符号开始

  • 名称不能以字母 xml(或者 XML、Xml 等等)开始

  • 名称不能包含空格

    属性:id值唯一

    文本:特殊字符需要使用转义

    ​ CDATA区:在该区域的数据会被原样展示。

    1
    2
    3
    4
    5
    <test>
    <![CDATA[
    if(a<b && a>c){}
    ]]>
    </test>

约束

编写XML:用户,软件使用者

解析XML:软件(半成品软件,如:框架),一般软件会有XML文档书写的说明规则(约束文档)。

用户和软件之间可以通过XML文档进行交互。

  • 约束:规定XML文档的书写规则

    • 能够在XML中引入约束文档
    • 能够简单的读懂约束文档
  • 分类:

    • DTD:一种简单的约束技术

      • 引入DTD文档到XML文档中

        内部DTD:将约束规则定义在xml文档中

        外部DTD:将约束规则定义于外部的DTD文件中

      1
      2
      本地引入:<!DOCTYPE 根标签名 SYSTEM "DTD文件的位置">
      网络引入:<!DOCTYPE 根标签名 PUBLIC "DTD文件的名字" "DTD文件的位置URL">
      1
      2
      3
      4
      5
      6
      <!ELEMENT students (student+)>
      <!ELEMENT student (name,age,gender)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT gender (#PCDATA)>
      <!ATTLIST student number ID #REQUIRED>
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE students SYSTEM "student.dtd">

      <students>
      <student number="s001">
      <name>张加林</name>
      <age>20</age>
      <gender></gender>
      </student>
      <student number="s002">
      <name>张加林</name>
      <age>20</age>
      <gender></gender>
      </student>
      </students>
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <?xml version="1.0" encoding="UTF-8" ?>
      <!--直接引入-->
      <!DOCTYPE students SYSTEM [

      <!ELEMENT students (student+)>
      <!ELEMENT student (name,age,gender)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT gender (#PCDATA)>
      <!ATTLIST student number ID #REQUIRED>

      ]>
    • Schema:复杂的约束技术,可以限定内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      <?xml version="1.0" encoding="ISO-8859-1" ?>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <xs:element name="shiporder">
      <xs:complexType>
      <xs:sequence>
      <xs:element name="orderperson" type="xs:string"/>
      <xs:element name="shipto">
      <xs:complexType>
      <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
      </xs:sequence>
      </xs:complexType>
      </xs:element>
      <xs:element name="item" maxOccurs="unbounded">
      <xs:complexType>
      <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
      </xs:sequence>
      </xs:complexType>
      </xs:element>
      </xs:sequence>
      <xs:attribute name="orderid" type="xs:string" use="required"/>
      </xs:complexType>
      </xs:element>

      </xs:schema>
      1
      2
      3
      4
      5
      6
      7
      <a:根标签名 xmlns:itcast="xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.itcast.cn/xml student.xsd
      http://www.itcast.cn/xml2 student2.xsd"
      xmlns:a="http://www.itcast.cn/xml"
      xmlns:b="http://www.itcast.cn/xml2">
      <a:students >
      <!--所有标签前面必须加a:(别名)-->

解析

解析:操作xml文档,将文档中的数据读取到内存中。

  • 操作xml文档
    • 解析(读取):将文档中的数据读取到内存中
    • 写入:将内存中的数据保存到xml文档中。持久化存储。
  • 解析xml的方式
    • DOM:将标记语言文档一次性加载进内存,在内存中会形成一颗内存树
      • 优点:操作方便,可以对文档进行CRUD的所有操作
      • 缺点:占用内存严重
    • SAX
      • 逐行读取(读一行,内存释放上一行),基于事件驱动的。
      • 优点:基本不占用内存
      • 缺点:只能读取,不能增删改
    • 服务器端使用DOM思想,移动端使用SAX思想
  • 常见解析器
    • JAXP:SUN公司提供,支持DOM和SAX两种思想,但是一般不用,因为效果较差。
    • DOM4J:一款优秀的解析器
    • Jsoup:一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。提供了一套非常省力的API,可以通过DOM、CSS以及类似于jQuery的操作方法来取出和操作数据。
    • PULL:Android操作系统内置的解析器,SAX方式。

Jsoup

  • 使用步骤:
    • 导入jar包
    • 获取Document对象
    • 获取对应的标签Element对象
    • 获取数据下