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>年1月13日</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

2、DTD结构

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

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

3、DTD声明

通过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>

运行效果:

Xml 学习的更多相关文章

  1. XML 学习介绍 收藏

    XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...

  2. XML学习笔记

    XML学习笔记 第一部分:XML简介 我们经常可以听到XML.HTML.XHTML这些语言,后两者比较清楚,一直不是很明白XML是什么,这里做一个总结. XML(eXtensible Markup L ...

  3. SQL SERVER XML 学习总结

    SQL  SERVER  XML  学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...

  4. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

  5. XML学习笔记(1)--XML概述

    XML基本概念 XML—extensible Markup Language(可扩展标记语言) XML最基本的三个概念 1)XML语言---描述事物本身(可扩展) 2)XSL语言---展现事物表现形式 ...

  6. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  7. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  8. Robot framework--内置库xml学习(一)

    Using lxml By default this library uses Python's standard ElementTree module for parsing XML, but it ...

  9. Java第三阶段学习(十、XML学习)

    一.XML学习 1.模拟Servlet执行 在学习完前端及java与数据库后,将进行WEB编程阶段的学习.在WEB编程中,可以通过浏览器访问WEB服务器上的数据.这时WEB服务器就相当于另一台计算机. ...

  10. [python xml 学习篇][0]

    tree = ET.parse("Result.xml")root = tree.getroot()print type(root)print root.tag # 得到root ...

随机推荐

  1. codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点

    J. Computer Network Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Des ...

  2. iOS开发——高级UI&带你玩转UITableView

    带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实 ...

  3. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  4. python 源码解读2

    http://www.jianshu.com/users/4d4a2f26740b/latest_articles http://blog.csdn.net/ssjhust123/article/ca ...

  5. subline的安装

    简单的安装方法 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: import urllib.request,os; pf = 'Package ...

  6. DDNS 的工作原理及其在 Linux 上的实现--转

    http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客 ...

  7. Getting Started with Zend Framework MVC Applications

    Getting Started with Zend Framework MVC Applications This tutorial is intended to give an introducti ...

  8. QPixmap 和 HBITMAP互转

    Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(const QPixmap &p, int hbitmapFormat = 0); 声明这一句后, 就可以 ...

  9. SandBox+NSBundle

    1.iOS的文件系统 1.1.SandBox(沙箱.沙盒) 在iOS中,任何一个App都存放在自己的一个称之为SandBox中 1)SandBox的组成 a.Bundle Container:放应用程 ...

  10. linux cd

    cd -回到上一次 操作的目录 cd ..回到上级目录 cd ../../回到上两级目录