XML

XML基本介绍

概述

XML即可扩展标记语言(Extensible Markup Language)

  • W3C在1998年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版 本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是 1.0版本 !

特点

  • 可扩展的,标签都是自定义的
  • 语法十分严格
XML的作用

在这里插入图片描述

XML的语法

XML文档声明格式
<?xml version="1.0" encoding="UTF-8"?>

属性说明:

  • versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0。
  • encoding:指定当前文档的编码。可选属性,默认值是utf-8。
使用XML 描述数据表中的数据

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<employees>
    
    <employee eid="2">
    <ename>林黛玉</ename>
    <age>20</age>
    <sex></sex>
    <salary>5000</salary>
    <empdate>2019-03-14</empdate>
    </employee>
    
</employees>

XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束

常见的xml约束:

  • DTD:DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

    • 开发中,我们不会自己编写DTD约束文档

    • 通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档,常见框架使用DTD约束有: Struts2、hibernate等

    • 引入DTD

      <!-- student.xml -->
      <?xml version="1.0" encoding="UTF-8" ?>
      <!-- student.dtd是框架提供的 -->
      <!DOCTYPE students SYSTEM "student.dtd"> 
      <students>
          <student number="s1">
              <name>小斌</name>
              <age>22</age>
              <sex></sex>
          </student>
      </students>
      
  • Schema

    • Schema是新的XML文档约束, 比DTD强大很多,是DTD 替代者

    • Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml

    • Schema 功能更强大,内置多种简单和复杂的数据类型

    • Schema 支持命名空间 (一个XML中可以引入多个约束文档)

    • <!-- student.xsd -->
      <?xml version="1.0"?>
      <xsd:schema xmlns="http://www.lagou.com/xml"
      			xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      			targetNamespace="http://www.lagou.com/xml"
      			elementFormDefault="qualified">
          
      	<xsd:element name="students" type="studentsType"/>
      	<xsd:complexType name="studentsType">
      		<xsd:sequence>
      			<xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
      		</xsd:sequence>
      	</xsd:complexType>    	
      	<xsd:complexType name="studentType">
      		<xsd:sequence>
                  <xsd:element name="name" type="xsd:string"/>
                  <xsd:element name="age" type="ageType" />
                  <xsd:element name="sex" type="sexType" />
      		</xsd:sequence>
      		<xsd:attribute name="number" type="numberType" use="required"/>
      	</xsd:complexType>    
      	<xsd:simpleType name="sexType">
      		<xsd:restriction base="xsd:string">
                  <xsd:enumeration value="male"/>
                  <xsd:enumeration value="female"/>
      		</xsd:restriction>
      	</xsd:simpleType>
          <xsd:simpleType name="ageType">
              <xsd:restriction base="xsd:integer">
                  <xsd:minInclusive value="0"/>
                  <xsd:maxInclusive value="200"/>
              </xsd:restriction>
          </xsd:simpleType>
      	<xsd:simpleType name="numberType">
          	<xsd:restriction base="xsd:string">
      			<xsd:pattern value="hehe_\d{4}"/>
      		</xsd:restriction>
      	</xsd:simpleType>
      </xsd:schema>
      
    • 引入Schema约束

      <!-- 1.查看schema文档,找到根元素,在xml中写出来 -->
      <?xml version="1.0" encoding="UTF-8" ?>
      <students>
          
      </students>
      <!-- 2.根元素来自哪个命名空间,使用xmlns指令来声明 -->
      <!-- 3.引入w3c的标准命名空间, 复制即可 -->
      <!-- 4.引入的命名空间跟哪个xsd文件对应? 使用schemaLocation来指定:两个取值:第一个为命名空间 第二个为xsd文件的路径-->
      <?xml version="1.0" encoding="UTF-8" ?>
      <students
      	xmlns="http://www.lagou.com/xml"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://www.lagou.com/xml student.xsd"
      >
      </students>
      
      <!-- student.xml -->
      <?xml version="1.0" encoding="UTF-8" ?>
      <students
          xmlns="http://www.lagou.com/xml"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.lagou.com/xml student.xsd"
      >
          
          <student number="hehe_1234">
              <name>张百万</name>
              <age>25</age>
              <sex>female</sex>
          </student>
          
      </students>
      

XML由谁来编写?-- 客户程序员

XML由谁来解析?-- 软件(各种框架)
在这里插入图片描述

XML解析

概述

当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知 识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。 人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。

解析方式

开发中比较常见的解析方式有两种:

DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

  • 优点:元素与元素之间保留结构关系,故可以进行增删改查操作
  • 缺点:XML文档过大,可能出现内存溢出显现

SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方 式进行具体解析,每执行一行,都将触发对应的事件。

  • 优点:占用内存少 处理速度快,可以处理大文件
  • 缺点:只能读,逐行后将释放资源
常见的解析器

解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员, 有提供易于操作的解析开发包。

  • DOM4J:一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。 它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
xpath方式读取xml
xpath介绍

XPath 是一门在 XML 文档中查找信息的语言,可以是使用xpath查找xml中的内容。

XPath 的好处:由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合 XPATH就可以直接获取到某个元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值