zoukankan      html  css  js  c++  java
  • Xml 学习

    1. XML概述

    1. XML的历史背景

    GML(1969):通用标记语言

    IBM公司的一些专家们一起研究的一个课题:

    软件必须有高度的可移植性,而且必须有一个统一的标准。为了实现软件的一处编写多处运行这个愿景所诞生。

    SGML(1985):专家们对GML升级,标准的通用标记语言。SGML广泛的应用于工业领域。

    HTML(1993):由W3C组织推广,超文本标记语言。HTM诞生愿景:跨平台,跨设备,跨浏览器打开同一个网页所展示的效果是一致的。

    XML(1998):由W3C组织推广,最初诞生的目的:为了替代HTML。但是在其他方面得到了很好的发展:在数据的传输方面得到很好的发展。

    面试题:什么是XML?其主要功能是什么?

    答:XML是可拓展的标记语言,其主要功能是用于数据的传输和数据的存储。

    1. 认识XML

    英文全称:extensible markup language

    中文全称:可拓展的标记语言

    XML定义:XML是用于标记电子文件使其具有结构性的标记语言,可以标记数据,定义数据类型,XML是具有可拓展性的。

    <html>

        <head></head>

        <body></body>

    </html>

    3、XML和HTML的差异

    • html标签不能自定义,从标签上不能达到"见词知意"的目的

    <ul>

        <li>华硕品质,坚若磐石</li>

    </ul>

    因为XML有可拓展性,所以可以自定义,所以可以在标签命名的时候,给予有意义的名称

    <无序列表>

        <列表项>华硕品质,坚若磐石</列表项>

    </无序列表>

    • html将数据与格式绑定在一起

    HTML侧重点是数据的表现形式。

    <b>华硕品质,坚若磐石</b>

    XML侧重点是数据的本身。

    <电脑>华硕品质,坚若磐石</电脑>

    XML是存储数据和描述数据结构,类比mysql。

    • 不同浏览器解html不同

    主流浏览器:火狐,谷歌,IE,其他浏览器。

    XML不存在兼容兼容问题。98%以上的浏览器中打开XML文档所展示的内容是一致的。

    • html语法要求不严格

    <ul>

        <li>无序列表

    </ul>

    以上代码在HTML中可以正常运行,不会提示任何语法错误。

    但是XML语法要求是很严格的,会提示xx行没有闭合标签,xx语法错误。

    1. XML的应用场景

    1. 充当程序间通讯的中间件(API)

    SHOP(php)    OA(JAVA)

    可以使用XML来实现不同编程语言之间的数据交互。

    XML在99%的编程语言中都支持。

    1. 配置文件

    场景:100个项目都链接同一个数据库

    SHOP(PHP)    OA(JAVA) ERP(C#) CRM(node.js) …100个

    Config.php        config.jsp config.apx config.js    …

                

                Config.xml

    1. 小型数据库

    XML在一些软件或者APP中都充当本地缓存文件。

    早期:金山词霸的本地数据库使用的XML。

    4、规范数据格式

    SHOP(PHP)                            OA(JAVA)

    解析java项目生成的XML文件                Java按照规定的格式生成XML数据

    需求:php想java项目获取一个人的信息

    期望需求: 名称(varchar) 年龄(int) 性别(var)

    实际返回:    年龄int        名称varchar性别var

    所以插入数据库的时候会报错。。

    XML可以规范约束数据的格式

    <person>

        <Name> 1</name>

        <age>2</age>

        <sex>3</sex>

    <person>

    1. XML数据传输原理

    1. XML快速入门

    • 描述人的信息:

    <?xml version='1.0' encoding='utf-8' ?>

    <person>
    <name>
    刘诗亮</name>
    <age>26</age>
    <sex>
    未知</sex>
    <job>
    程序员</job>
    </person>

     

    描述书籍的信息:

    <?xml version='1.0' encoding='utf-8' ?>
    <book>
    <title>
    《三体》</title>
    <autuor>
    刘慈溪</autuor>
    <price>99.8¥</price>
    <publish>
    传智出版社</publish>
    <date>2016
    113</date>
    </book>

    二、XML语法

    1、文档声明

    在PHP中使用header()方法定义当前文档的头信息

    在XML中使用文档声明来定义当前文档的头信息

    基本语法:

    <?xml version='1.0' encoding='utf-8' ?>
    						

    参数:version         XML的版本号                  1.0 (必填)

         Encoding        当前文档的字符集编码         utf-8 (必填)

         Standalone        当前文档是否依赖月外部DTD no

    2、元素(标签,标记,节点)

    元素是构成XML文档的最基本的单位,为了识别和却别元素,我们可以给元素给予有意义的命名:字母,数字,符号。但是,命名时必须得遵循相关的命名规范。

    2.1、命名规范

    • 元素的名称必须以下划线和字母开头,后面可以跟字母,数字,符号(.-_)
    • XML对大小写铭感:<b></b> <B></B>
    • XML元素名称中不可以出现空格符或者制表符

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <person>
    <_123>
    以下划线开头</_123>
    <abcd>
    以字母开头</abcd>
    <_a.-_>
    综合应用</_a.-_>
    </person>

    2.2、基本规范

    • 一个XML文档中有且只有一个根元素
    • XML中的元素必须正确的嵌套
    • XML中的元素必须闭合(除空元素外)

    错误实例:必须正确的嵌套

    <?xml version="1.0" encoding="UTF-8" ?>
    <person>
    <name>
    张某某</name><sex>未知</sex>
    </person>

    错误实例:元素标签必须闭合

    <?xml version="1.0" encoding="UTF-8" ?>
    <person>
    <name>
    张某某
    </person>

    2.3、根元素

    在一个XML文档中有且只有一个根元素,根元素就是XML文档中最外层的那个元素。

    2.4、空元素

    在HTML有一些单标签:<br/> <hr/>

    空元素:没有内容的元素

    可以写作:<元素名称></元素名称>

    也可以写作:<元素名称/>

    3、属性

    <a href=``></a>

    3.1命名规范:同元素的命名规范一致。

    • 属性=的名称必须以下划线和字母开头,后面可以跟字母,数字,符号(.-_)
    • XML对大小写铭感
    • XML属性名称中不可以出现空格符或者制表符

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <person id="01" _id="02" _abc.="003" b="
    我是小b" B="我的大B">老张的XML</person>

    3.2、基本规范

    • 属性必须在写元素的开始标签中
    • 在同一个XML元素中,属性名称不能重复
    • XML属性的值必须使用引号引起来(单引号和双引号都可以)

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <perons say="
    偶哈呦" says='偶哈呦'>我是老张</perons >

    3.3、关于属性

    问题思考:属性是用来干什么?

    XML属性也可以用来存储数据,但是尽量不要使用属性来存储数据

    属性是用来描述数据的数据。

    <?xml version="1.0" encoding="UTF-8" ?>
    <perons say="
    偶哈呦" says='偶哈呦'>
    <member id="001">
    张三</member>
    <member id="002">
    张三</member>
    <member id="003">
    张三</member>
    <member id="004">
    张三</member>
    </perons

    4、注释

    基本语法:

    <!--我是注释内容-->

    注意:不可以在注释内容中出现 --    

    5、特殊字符

    在XML中存储的数据会有一些XML敏感的符号,我们可以通过转义字符实现替换。

    在XML中提供了5中转义字符

    &lt;

    &gt;

    &amp;

    &apos;

    &quot;

    6、CDATA区段

    在XML提供了大批量特殊字符存储的方案。

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>

    <code>
    <![CDATA[

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>DTD
    校验器</title>
    <script>
    //1
    、实例化DTD对象
    var M = new ActiveXObject('Microsoft.XMLDOM');
    //2
    、开启DTD校验
    M.validateOnParse = true;
    //3
    、关闭异步
    M.async = false;
    //4
    、载入XML文档
    M.load('entity.xml');
    //5
    、配置调试信息
    document.write('
    错误信息:'+ M.parseError.reason);
    document.write('<hr/>');
    document.write('
    错误行数:'+ M.parseError.line);
    </script>


    </head>
    <body>

    </body>
    </html>
    ]]>


    </code>

    7、处理指令

    作用:用来指挥软件如何解析XML文档。

    语法:必须以"<?"作为开头,以"?>"作为结尾。

    常用处理指令:

            xml指令

            xml-stylesheet指令

    例: <?xml-stylesheet type="text/css" href="style.css"?>

     

    运行效果:

    代码太多:见

    8、中文命名XML

    只有支持中文的字符集才可以使用中文命名的XML文档。

    譬如常用的:utf-8

    实例代码:以下字符集不支持XML中使用中文

    <?xml version="1.0" encoding="shift_jis" ?>
    <
    英雄联盟>
    <
    英雄 id="坦克">德玛西亚.盖伦</英雄>
    <
    英雄 id="ADC">千珏</英雄>
    <
    英雄 id="ADC">大嘴</英雄>
    </
    英雄联盟>

    三、DTD语法

    1、基本概念

    • DTD是:文档类型约束
    • DTD是用来约束XML文档的。
    • 凡是被DTD所约束的XML文档,其元素,元素的组织方式,元素所包含的内容,元素的属性都必须符合DTD所定义的规则。
    • DTD所定义的规则:是由开发者自定义。

    两个凡是:

    • 凡是满足了XML语法规范的XML文档,我们将其称之为:结构良好的XML文档
    • 凡是满足了DTD规则的XML文档,我们将其称之为:有效的XML文档。

    关系:有效和结构良好的XML文档有什么关系?

    • 结构良好的XML文档不一定是有效的XML文档
    • 有效的XML文档一定是结构良好的XML

    一张图看懂两者关系:

    s

    2DTD结构

    一个完整的DTD包含以下几点:

    • DTD声明
    • 元素声明
    • 属性声明
    • 实体声明

    3DTD声明

    通过DTD所编写的位置的不同,将其分为内部DTD和外部DTD

    3.1、内部DTD

    基本语法:

    <!DOCTYPE 根元素[

        

    ]>

    <!DOCTYPE person[
    <!--
    编写相关的DTD语法-->
    ]>

    3.2、外部DTD

    <!DOCTYPE 根元素 SYSTEM `外部DTD文档的路径`>

    1. DTD校验器

    作用:是引来校验XML文档是否符合DTD所定义的规则。

    DTD校验器只支持IE浏览器,因为ActiveXObject对象只有在IE浏览器中存在,所以我们在调试的时候,通过IE浏览器调试。

    4.1、创建DTD校验器五步走

        <script>
    //1
    、实例化DTD校验器
    var M = new ActiveXObject('Microsoft.XMLDOM');
    //2
    、开启DTD校验器
    M.validateOnParse = true;
    //3
    、关闭异步
    M.async =false;
    //4
    、载入XML文档
    M.load('demo02.xml');
    //5
    、配置调试信息
    document.write('错误信息:'+ M.parseError.reason);
    document.write('<hr/>');
    document.write('
    错误行数:'+ M.parseError.line);
    </script>
    1. 元素声明

    5.1、格式声明

    基本格式:

    <!ELEMENT 元素名称 元素类型>

    实例代码:

    <!DOCTYPE person[
    <!ELEMENT person (#PCDATA)>
    ]>

    52、内容声明(属性类型)

    • (#PCDATA)    被声明的元素的内容必须为字符串
    • ANY            被声明的元素的内容可以是子元素可以是字符串
    • EMPTY        被声明的元素的内容必须为空。

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person ANY>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age EMPTY>
    ]>
    <person>
    <name>
    偶哈呦</name>
    <age></age>
    </person>

    5.3、子元素声明

    • (元素1,元素2,元素3,…..,元素n) 被声明元素必须按照这样的顺序出场
    • (元素1|元素2|元素3|…元素n) 被声明的元素必须出现其中一个

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person (name,age,sex)>
    <!ELEMENT name (name1|name2|name3)>
    <!ELEMENT age ANY>
    <!ELEMENT sex ANY>
    <!ELEMENT name1 ANY>
    <!ELEMENT name2 ANY>
    <!ELEMENT name3 ANY>
    ]>
    <person>
    <name>
    <name3></name3>
    </name>
    <age></age>
    <sex></sex>
    </person>

     

    5.4、混合声明

    实例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person (name,age,(sex|job|address))>
    <!ELEMENT name ANY>
    <!ELEMENT age ANY>
    <!ELEMENT sex ANY>
    <!ELEMENT job ANY>
    <!ELEMENT address ANY>

    ]>

    <person>
    <name></name>
    <age></age>
    <address></address>
    </person>

     

    3.5、修饰符

    *    被声明的元素可以出现0次或者多次(随意)

    ?    被声明的元素可以出现1次或者0次(最多一次)

    + 被声明的元素可以出现1次或者多次(最少一次)

     

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person (name?,age*,sex+,job)>
    <!ELEMENT name ANY>
    <!ELEMENT age ANY>
    <!ELEMENT sex ANY>
    <!ELEMENT job ANY>
    <!ELEMENT address ANY>
    ]>
    <person>
    <name></name>
    <age></age>
    <age></age>
    <sex></sex>
    <job></job>
    </person>

    1. 属性声明

    6.1、格式声明

    <!ATTLIST 元素名称 属性名称 属性类型 默认值>

    6.2属性类型(内容声明)

    • CDATA                被声明的属性的值可以是字符串
    • ID                    被声明的属性的值在整个文档中必须唯一,且属性的值必须符合XML命名规范。
    • (值1|值2|值3|值4) 枚举,被声明的属性的值必须为其中一个。

    实例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person (name,sex)*>
    <!ATTLIST person id CDATA #REQUIRED>
    <!ELEMENT name ANY>
    <!ATTLIST name id ID #REQUIRED>
    <!ATTLIST name id ID #REQUIRED>
    <!ELEMENT age ANY>
    <!ELEMENT sex ANY>
    <!ATTLIST sex var (
    ||未知) #REQUIRED>
    ]>
    <person id="001" >
    <name id="a02"></name>
    <sex var="
    未知"></sex>
    </person>

     

    6.3、默认值

    • #REQUIRED        被声明的属性必须包含
    • #IMPLIED        可有可无
    • #FIXED `固定值`    值必须为固定的

     

    示例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person (name,age,sex)>
    <!ELEMENT name ANY>
    <!ATTLIST name daming CDATA #IMPLIED>
    <!ATTLIST name xiaoming CDATA #REQUIRED>
    <!ELEMENT age ANY>
    <!ATTLIST age number CDATA #FIXED '18'>
    <!ELEMENT sex ANY>
    ]>
    <person>
    <name daming="
    我是大明" xiaoming="我的小明"></name>
    <age number="18"></age>
    <sex></sex>
    </person>

     

    7、实体

    7.1、引用实体

    &lt;

    &gt;

    &amp;

    &apos;

    &quot;

     

     

    基本语法:

    <!ENTITY 实体名称 `实体值`>

     

    实例代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person[
    <!ELEMENT person ANY>
    <!ENTITY name "
    偶哈呦">
    <!ENTITY school "
    传智播客">
    <!ENTITY teacher "
    张某某">
    <!ENTITY class "PHP
    十五期">
    ]>
    <person>
    我是来自于 &school;&class;&teacher;
    </person>

     

    7.2、参数实体:

    参数实体用于DTD内部。

    参数实体只能在外部DTD中定义。

     

     

    基本语法:

    <!ENTITY % 实体名称 `实体值`>

    使用方法:

    %实体名称;

     

    示例代码:waibu.DTD

    <!ELEMENT person (name)>
    <!ENTITY
    % type "(#PCDATA)">
    <!ELEMENT name %type;>
    <!ENTITY name "
    偶哈呦">
    <!ENTITY school "
    传智播客">
    <!ENTITY teacher "
    张某某">
    <!ENTITY class "PHP
    十五期
    ">

    实例代码:demo_17_canshushiti.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE person SYSTEM "waibu.DTD">
    <person>
    <name>
    啦啦啦啦

    </name>
    </person>

     

    运行效果:

     

  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/nyxd/p/5362751.html
Copyright © 2011-2022 走看看