zoukankan      html  css  js  c++  java
  • XML

    XML

    1.XML概述

    xml: extendsible markup language,可扩展的标记语言。其实就是一个文件,后缀为 .xml。

    作用:

    • 可以用来保存数据

    • 可以用来做配置文件

    • 数据传输载体

    2.文档声明

    <?xml version="1.0" encoding="gbk" standalone="no" ?>
    version : 解析这个xml的时候,使用什么版本的解析器解析
    encoding : 解析xml中的文字的时候,使用什么编码来翻译
    standalone  : no - 该文档会依赖关联其他文档 ,yes-- 这是一个独立的文档
    

    默认文件保存的时候,使用的是GBK的编码保存,所以要想让我们的xml能够正常的显示中文,有两种解决办法:

    1. 让encoding也是GBK 或者 gb2312;
    2. 如果encoding是 utf-8 , 那么保存文件的时候也必须使用utf-8。

    保存的时候见到的ANSI 对应的其实是我们的本地编码 GBK。为了通用,建议使用UTF-8编码保存,以及encoding 都是 utf-8。

    3.元素定义(标签)

    1. 其实就是里面的标签, <> 括起来的都叫元素 。 成对出现。 如下:

    2. 文档声明下来的第一个元素叫做根元素 (根标签)

    3. 标签里面可以嵌套标签

    4. 空标签

      既是开始也是结束。 一般配合属性来用。

    5. 标签可以自定义。

      XML 命名规则:

      名称可以含字母、数字以及其他的字符
      名称不能以数字或者标点符号开始
      名称不能以字符 “xml”(或者 XML、Xml)开始
      名称不能包含空格

    4.简单元素&复杂元素

    • 简单元素

    元素里面包含了普通的文字

    • 复杂元素

    元素里面还可以嵌套其他的元素

    • 属性的定义
    定义在元素里面, <元素名称  属性名称="属性的值"></元素名称>
    	<stus>
    		<stu id="10086">
    			<name>张三</name>
    			<age>18</age>
    		</stu>
    		<stu id="10087">
    			<name>李四</name>
    			<age>28</age>
    		</stu>
    	</stus>
    

    5.注释

    与html注释一样:

    不允许放置在文档的第一行,必须在文档声明的下面。

    6.非法字符

    严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

    如果某段字符串里有过多的字符, 并且包含类似标签或关键字,不想让xml的解析器去解析。 那么可使用CDATA来包装。不过这个CDATA 一般比较少看到,通常在服务器给客户端返回数据的时候。

    <des><![CDATA[<a href="http://www.baidu.com">我爱黑马训练营</a>]]></des>
    

    7.XML解析方式

    1. DOM(Document Object Model)

      采用树形结构的方式访问XML文档。

      • 优点

        允许应用程序对数据和结构做出更改;

        访问是双向的,可在任何时候在树中上下导航,获取和操作任意部分的数据。

      • 缺点

        通常需要加载整个XML文档来构造层次结构,消耗资源大。

    2. SAX(Simple API for XML)

      采取事件模型。

      • 优点

        无需等待所有数据都被处理,分析就能开始;

        可以在满足某个条件时停止解析,不必解析整个文档;

        只在读取数据时检查数据,不需保存在内存中;

        效率和性能较高,能解析大于系统内存的文档。

      • 缺点

        需要应用程序自己负责TAG的处理逻辑(如维护父子关系等),文档越复杂程序就越复杂;

        单向导航,无法定位文档层次,不支持XPath。

    3. JDOM(Java-based Document Object Model)

      目的是成为Java特定文档模型。

      • 优点

        使用具体类而不是接口,简化了API;

        大量使用了Java集合类,方便开发人员。

      • 缺点

        灵活性较差;

        性能较差。

    4. DOM4J(Document Object Model for Java)

      • 优点

        大量使用了Java集合类,方便开发人员;

        支持XPath;

        性能好。

      • 缺点

        大量使用了接口,API较为复杂。

    • 比较
      1. DOM4J性能最好,如果XML文档较大且不考虑可移植性,就采用DOM4J。
      2. JDOM和DOM性能较差,但可移植,如果文档较小建议用JDOM。
      3. SAX性能较好,如果需要及时处理数据而不需要保存数据则考虑SAX。

    8.XML约束

    如下的文档, 属性的ID值是一样的,这在生活中是不可能出现的。 并且第二个学生的姓名有好几个,一般也很少。那么怎么规定ID的值唯一, 或者是元素只能出现一次,不能出现多次? 甚至是规定里面只能出现具体的元素名字。

    <stus>
    	<stu id="10086">
    		<name>张三</name>
    		<age>18</age>
    		<address>深圳</address>
    	</stu>
    	<stu id="10086">
    		<name>李四</name>
    		<name>李五</name>
    		<name>李六</name>
    		<age>28</age>
    		<address>北京</address>
    	</stu>
    </stus>
    
    • DTD

      语法自成一派,出现较早,可读性差。

    1. 引入网络上的DTD

      <!--    文档类型  根标签名字 网络上的dtd   dtd的名称   dtd的路径-->
      <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
      
    2. 引入本地的DTD

      <!-- 引入本地的DTD  : 根标签名字 引入本地的DTD  dtd的位置 -->
      <!-- <!DOCTYPE stus SYSTEM "stus.dtd"> -->
      
    3. 直接在XML里嵌入DTD的约束规则

      <!DOCTYPE stus [
          <!ELEMENT stus (stu)>
          <!ELEMENT stu (name,age)>
          <!ELEMENT name (#PCDATA)>
          <!ELEMENT age (#PCDATA)>
      ]>
      
      <!ELEMENT stus (stu)>  : stus 下面有一个元素 stu  , 但是只有一个
      <!ELEMENT stu (name , age)>  stu下面有两个元素 name  ,age  顺序必须name-age
      <!ELEMENT name (#PCDATA)> 
      <!ELEMENT age (#PCDATA)>
      <!ATTLIST stu id CDATA #IMPLIED> stu有一个属性 文本类型, 该属性可有可无
      
      元素的个数:
      		+ 一个或多个
      		*  零个或多个
      		? 零个或一个
      属性的类型定义:
      		CDATA : 属性是普通文字
      		ID : 属性的值必须唯一
      
      <!ELEMENT stu (name , age)>		按照顺序来 
      <!ELEMENT stu (name | age)>   两个中只能包含一个子元素
      
    • Schema

      其实就是一个xml , 使用xml的语法规则,xml解析器解析起来比较方便 , 是为了替代DTD 。
      但是Schema 约束文本内容比DTD的内容还要多,所以目前也没有真正意义上的替代DTD。

    约束文档:
    	<!-- xmlns  :  xml namespace : 名称空间 /  命名空间
    	targetNamespace :  目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 
    	elementFormDefault : 元素的格式化情况。  -->
    
    	<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    		targetNamespace="http://www.itheima.com/teacher" 
    		elementFormDefault="qualified">
    		<element name="teachers">
    			<complexType>
    				<sequence maxOccurs="unbounded">
    					<!-- 这是一个复杂元素 -->
    					<element name="teacher">
    						<complexType>
    							<sequence>
    								<!-- 以下两个是简单元素 -->
    								<element name="name" type="string"></element>
    								<element name="age" type="int"></element>
    							</sequence>
    						</complexType>
    					</element>
    				</sequence>
    			</complexType>
    		</element>
    	</schema>
    
    实例文档:
    	<?xml version="1.0" encoding="UTF-8"?>
    	<!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
    	xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
    	xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
    	 -->
    	<teachers
    		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		xmlns="http://www.itheima.com/teacher"
    		xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
    	>
    		<teacher>
    			<name>zhangsan</name>
    			<age>19</age>
    		</teacher>
    		<teacher>
    			<name>lisi</name>
    			<age>29</age>
    		</teacher>
    		<teacher>
    			<name>lisi</name>
    			<age>29</age>
    		</teacher>
    	</teachers>
    

    名称空间的作用:在写元素的时候,可以指定该元素使用的是哪一套约束规则。

    一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。

  • 相关阅读:
    vue watch 深度监控
    淘宝后台添加颜色尺码动态sku
    js下载
    vue创建1.0项目
    vue assetsPublicPath
    ajax 请求 get请求成功,post 404 not found
    vuejs npm chromedriver 报错
    webpack 输出多个文件
    移动端 js 实现图片上传 预览
    有用的网址
  • 原文地址:https://www.cnblogs.com/ALiWang/p/13723894.html
Copyright © 2011-2022 走看看