码迷,mamicode.com
首页 > 其他好文 > 详细

XML基础学习

时间:2020-03-25 23:18:52      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:存储   编写   多个   对比   忽略   嵌套   lag   文件名   namespace   

  1. XML概念

    XML是可扩展标记语言(对比HTML是超文本标记语言)。

    主要是用来传输和存储数据,XML的标签没有被预定义,可以自定义标签

  2. XML和HTML区别

    • xml的标签都是自定义的,html的标签是预定义的。
    • xml的语法严格,html宽松
    • xml用于传输和存储数据,html用于显示数据
  3. XML结构

    XML文档形成了一种树结构,有且只有一个根节点,是所有其他元素的父元素。

    以下是一个简单的XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <school>
    	<student>
            <name>张三</name>
            <age>18</age>
        </student>
        <student>
            <name>李四</name>
            <age>25</age>
        </student>
    </school>
    

    第一行是XML声明,定义了XML版本(1.0)和使用的编码集(UTF-8)

    school是根元素(就比如是解释了这是一个学校)

    接下来的student是school的子元素,name和age又是student的子元素,两个student是同级元素。

    整个XML的结构可以如下图表示:

技术图片

  1. XML语法

    • xml文档后缀名为.xml
    • 所有XML元素都必须关闭标签。(XML声明不算,因为他不是XML元素)
    • XML标签对大小写敏感
    • XML文档必须有根元素
    • XML元素必须正确的嵌套(不能你中有我,我中有你)
    • XML的属性值必须有引号(单引号或双引号都可以)
    • XML注释:<!-- 注释内容 -->
  2. XML文档声明

    • 格式:<?xml 属性列表 ?>
    • 属性列表
      • version:版本号,是必须要有的属性
      • encoding:编码方式
      • standalone:是否独立。yes:不依赖其他文件;no:依赖其他文件
  3. XML标签元素

    • 命名规则
      • 可以包含字母,数字以及其他字符
      • 不能以数字或者标点符号开头
      • 名字不能以字符xml或者XML,Xml开始
      • 名字不能包含空格
  4. XML属性

    XML元素可以在开始标签中包含属性(与HTML类似)。

    属性用于提供关于元素的额外信息。

    XML属性必须加引号(单双引都行)

    id属性是唯一的

  5. XML文本

    所有的XML文档中的文本都会被解析器解析,只有CDATA区段的文本会被解析器忽略

    当某个XML元素被解析时,其标签之间的文本也会被解析。之所以这样子原因是XML元素是可以包含其他元素的,比如以下例子,name标签中包含着另外的两个标签firstName和lastName.

    <name><firstName>zhang</firstName><lastName>san</lastName></name>

    解析器会把文本解析为子元素,如下:

    <name>
    <firstName>zhang</firstName>
    <lastName>san</lastName>
    </name>
    

    CDATA:指的是不应由XML解析器进行解析的文本数据。

    在XML中,<&是非法的,会产生错误,因为XML会去解析,但某些文本,比如JavaScript代码,会包含大量的<或者&字符,为了避免错误,可以将代码部分定义为CDATA(XML不会解析,原封不动的展示)

    CDATA使用格式:<![CDATA[代码块]]>

    <script>
    <![CDATA[
    function fun() {
    	console.log("hello JavaScript");
    }
    ]]>
    </script>
    
  6. XML约束

    ? 因为XML是可扩展的,而且标签时可以自定义的,因此只要满足xml的要求,就可以写出一个xml文件。但是在实际开发中,主要是使用框架,需要给xml引入一些语法,用来检测xml文件是否编写正确。

    ? 也就是说,约束其实就是用来规定XML的书写规则的。

    ? (作为框架的使用者,只需要满足能够在xml中引入约束文档以及能够简单的读懂约束文档就行了)。

    XML主要有两种类型的约束:

    • DTD约束(一种简单的约束技术)(细节可以参考:https://cloud.tencent.com/developer/article/1019644)

      • 引入dtd文档到xml的方式:

        1. 内部dtd:将约束的规则定义在xml文档中
        2. 外部dtd:将约束的规则定义在外部的dtd文件中
          • 本地文件:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置" >
          • 网络文件:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
      • 基本语法

        <!ELEMENT 元素名 类型>

      示例:以一个班级为例子编写dtd文件 class.dtd

      <!ELEMENT class (student+)>
      <!ELEMENT student (name,age)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      

      解释:第一行表示根元素为class,并且class里有1个或多个student子元素;

      第二行表示student的子元素有name和age;

      第三行和第四行表示name和age下都没有子元素,#PCDATA表示可以放任意文本

      编写class.xml文件并引入dtd文件

      <?xml version="1.0" encoding="utf-8" ?>
      <!-- 引入dtd,约束该xml-->
      <!DOCTYPE class SYSTEM "class.dtd">
      <class>
      	<student>
          	<name>张三</name>
              <age>18</age>
          </student>
          <student>
          	<name>李四</name>
              <age>24</age>
          </student>
      </class>
      

      以上xml打开是不会报错的,这里借助IE来校验(IE5以上的浏览器内置了XML解析工具),编写以下html

      <html>
          <head>
          <!--自己编写一个简单的解析工具,去解析XML DTD是否配套-->     
          <script language="javascript">
              // 创建xml文档解析器对象
              var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
              // 开启xml校验
              xmldoc.validateOnParse = "true";
              // 装载xml文档,即指定校验哪个XML文件
              xmldoc.load("class.xml");
              document.writeln("错误信息:"+xmldoc.parseError.reason+"<br>");
              document.writeln("错误行号:"+xmldoc.parseError.line);
          </script>
      
          </head>
          <body>
      
          </body>
      </html>
      

      就会出现报错:

      技术图片

    • schema约束(一种复杂的约束技术)(可以参看https://www.lagou.com/lgeduarticle/17555.html)

      xml Schema是基于XML的DTD替代者,后缀名为.xsd

      示例:编写personSchema.xsd

      <?xml version="1.0" encoding="UTF-8"?>
      <xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema"    
                  xmlns="http://www.example.org/personSchema"
                  targetNamespace="http://www.example.org/personSchema"
                  elementFormDefault="qualified">                            <!--讲解1-->
      <xs:element name=‘persons‘>                               <!--约束xml根元素为persons-->
          <xs:complexType>                                       <!--complexType:定义persons为复合元素-->
              <xs:sequence maxOccurs=‘unbounded ‘>               <!--讲解2-->
                  <xs:element name=‘person‘>                     <!--约束persons下的子元素名字必须为person-->  
                      <xs:complexType>
                         <xs:sequence>                          <!--sequence:必须按照顺序实现:先有姓名,最后年龄.-->
                             <xs:element name=‘姓名‘ type=‘xs:string‘ />
                             <xs:element name=‘性别‘ type=‘xs:string‘ />
                             <xs:element name=‘年龄‘ type=‘xs:string‘ />
                         </xs:sequence>
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
       </xs:element>
      </xs:schema>
      

      讲解1:

      xmlns:xs=http://www.w3.org/2001/XMLSchema

      • 约束XML里使用xs:作前缀的元素、属性、类型等名称的变量是属于http://www.w3.org/2001/XMLSchema命名空间的。

      xmlns=http://www.example.org/personSchema

      targetNamespace="http://www.example.org/personSchema"

      讲解2:

      <xs:sequence maxOccurs=‘unbounded‘>

      • sequence表示必须按照顺序实现, **maxOccurs=*‘unbounded‘**表示可以有多个相同的,比如上面就是表示persons里可以有多个person.

      创建对应的XML:

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- 
      	1.填写xml文档的根元素
      	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
      	4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml"	
       -->
      <p:persons xmlns:p="http://www.example.org/personSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">
        <p:person>
          <p:姓名>p:张三</p:姓名>
          <p:性别>p:男</p:性别>
          <p:年龄>p:22</p:年龄>
        </p:person>
        <p:person>
          <p:姓名>p:李四</p:姓名>
          <p:性别>p:男</p:性别>
          <p:年龄>p:17</p:年龄>
        </p:person>
      </p:persons>
      

      xmlns:p="http://www.example.org/personSchema"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      • 指定定义的XML实例名称空间规范格式.默认都以这个2001版本为使用

      xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">

      • 指定我们使用的"http://www.w3.org/2001/XMLSchema"名称空间的约束格式为personSchema.xsd约束文件的内容(也就是说该xml被personSchema.xsd所约束)

XML基础学习

标签:存储   编写   多个   对比   忽略   嵌套   lag   文件名   namespace   

原文地址:https://www.cnblogs.com/LucasBlog/p/12571031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!