前言:

XML指可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据。我们在jQuery中讲解了现在流行了JSON,但是为了更好的学习之后的框架,我们还是来看看XML教程。

首先,我们依旧从一个简单的例子开始:

<?xml version="1.0" encoding="UTF-8"?>
<note><to>Tove</to><from>Jani</from><heding>Reminder</heding><body>Don't forget me this weekend!</boy>
</note>

1、什么是XML?

1)XML指可扩展标记语言

2)XML是一种很像HTML的标记语言

3)XML的设计宗旨是传输数据,而不是显示数据。

4)XML标签没有被预定义,你需要自行定义标签

5)XML被设计为具有自我描述性

6)XML是W3C的推荐标准。

那我们很快就可以看出,XML的焦点是数据的内容HTML的焦点是数据的外观

2、XML用途

1)XML把数据从HTML分离

如果您需要在HTML文档中显示动态数据,每当数据改变时,需要花费大量时间来编辑HTML,通过XML,数据可以独立存储在XML文件中(当然啦,我们肯定是可以通过JavaScript来改变的)。所以通过使用几行JavaScript代码,就可以读取到一个外部XML文件,并更新网页的数据内容。

3、XML树结构

我们上面的例子中,第一行是XML声明,定义版本和使用的编码,之后就是根元素和子元素。我们很清楚HTML中DOM的树结构,那么我们看看XML文档的树结构吧。

4、语法

1)文档必须有根元素

2)XML声明文件时可选的,如果需要要放到文档的第一行

3)每一个元素都必须有一个关闭标签

4)标签对大小写敏感。

5)属性值必须加引号

6)当然,这里也有实体引用

< < less than
> > greater than
& & ampersand
' ' apostrophe
" " quotation mark

7)注释,和HTML一样<!-- comment -->

8)在HML中,空格会被保留

9)XML以LF存储换行

在Windows应用程序中,换行通常用一对字符来存储:回车符(CR)和换行符(LF)

在Unix和Mac OSX中,使用LF来存储新行。

在旧的Mac系统中,使用CR来存储新行。

XML以LF存储换行(我们用'\n'就好~)。

5、XML元素

XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

一个元素可以包括:

  • 其他元素

  • 文本

  • 属性

  • 或混合以上所有...

1)命名规则

虽然大多和编程语言命名规则一致,但有所差别:

  • 名称可以包含字母、数字以及其他的字符

  • 名称不能以数字或者标点符号开始

  • 名称不能以字母 xml(或者 XML、Xml 等等)开始

  • 名称不能包含空格

好的命名就是具有描述性,用下换线之类的,避免使用奇怪的字符。

6、XML属性

虽然是自定义标签,但是也有属性:

第一个实例中使用了 date 属性:

<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第二个实例中使用了date元素:

<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第三个实例中使用了扩展的date元素:

<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

1)我们要注意属性不能包含多个值(元素可以);属性不能包含树结构;属性不容易扩展。

2)针对元数据的XML属性:

这里分配ID引用,仅仅是为了标识XML元素:

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

7、验证

拥有正确语法的XML被称为“形式良好”的XML,通过DTD验证的XML是合法的XML。

1)验证XML文档

DOCTYPE声明是对外部DTD文件的引用

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

这个文件的内容如下:

<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

2)也可以使用XML Schema代替DTD。

<xs:element name="note">
​
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
​
</xs:element>

3)验证器

可以用一个通过的XML验证器


验证部分扩展-简洁DTD教程

DTD(文档类型定义)的作用是定义XML文档的合法合并模块,可以成行的声明与XML文档中,也可以作为一个外部引用。

1、简介

1)内部DOCTYPE声明

加入DTD被包含在你的XML源文件中,它正确通过下面的语法包装在一个DOCTYPE声明中:

<!DOCTYPE root-element [element-declarations]>

例如:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
  • !DOCTYPE note (第二行)定义此文档是 note 类型的文档。

  • !ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

  • !ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型

  • !ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型

  • !ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

  • !ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

2)外部文档声明

<!DOCTYPE root-element SYSTEM "filename">

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>
</note>

DTD的note.dtd文件:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

通过DTD,你的每一个XML文件均可携带一个有相关自身格式的描述,可以一致的使用某个DTD来交换数据,也可以验证自身的数据。

2、DTD-XML构建模块

1、XML文档构造模块:

  • 元素

  • 属性

  • 实体

  • PCDATA

  • CDATA

这里我们解释PCDATA:

PCDATA的意思是被解析的字符数据(parsed character data)。可以把字符数据想象为XML元素的开始标签与结束标签之间的文本,PCDATA是被解析器解析的文本,这些文本将被解析器检查实体以及标记。

CDATA:

CDATA的意思是字符数据(character data),CDATA是不会被解析器解析的文本。

3、元素

1)声明一个元素:

在一个DTD中,元素通过元素声明来进行声明:

<!ELEMENT element-name category>
或
<!ELEMENT element-name (element-content)>

4、属性

在DTD中,属性通过ATTLIST声明来进行声明

<!ATTLIST element-name attribute-name attribute-type attribute-value>
​
DTD 实例:
​
<!ATTLIST payment type CDATA "check">
​
XML 实例:
​
<payment type="check" />
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值


7、使用XSLT显示XML

为了更加直观的看到我们的XML,我们可以使用CSS,但是不推荐使用这个,所以我们使用XSLT。它是首选的XML样式表语言,比CSS更加完善,是在浏览器显示XML文件之前,先把它转换为HTML。

8、JavaScript-XMLHttpRequest对象

XMLHttpRequest对象用于在后台与服务器交换数据,是开发者的梦想,因为能够:

  • 在不重新加载页面的情况下更新网页

  • 在页面已加载后从服务器请求数据

  • 在页面已加载后从服务器接收数据

  • 在后台向服务器发送数据

创建一个XMLHttpRequest对象语法:

xmlhttp=new XMLHttpRequest();

9、XML Parser

我们在学习JSON的时候,有parse()方法解析,这里我们看看XML的解析。

1)解析XML文档:

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

2)解析XML字符串

txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";
​
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}

我们把XML转换为了XML DOM对象。

3)XML DOM

这里将XML文档解析到XMLDOM对象中,然后通过JavaScript提取信息:

<html>
<body>
<h1>W3Schools Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</div>
​
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
​
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
​
</body>
</html>

10、服务器上的XML

1)从数据库生成XML

<%
response.ContentType = "text/xml"
set conn=Server.CreateObject("ADODB.Connection")
conn.provider="Microsoft.Jet.OLEDB.4.0;"
conn.open server.mappath("/db/database.mdb")
​
sql="select fname,lname from tblGuestBook"
set rs=Conn.Execute(sql)
​
response.write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.write("<guestbook>")
while (not rs.EOF)
response.write("<guest>")
response.write("<fname>" & rs("fname") & "</fname>")
response.write("<lname>" & rs("lname") & "</lname>")
response.write("</guest>")
rs.MoveNext()
wend
​
rs.close()
conn.close()
response.write("</guestbook>")
%>

后记:

去了解XML可以很好的帮助我们之后去理解javaweb中xml文件结构。

XML教程~一文完结相关推荐

  1. jQuery教程~~~一文完结

    目录 前言: 一.jQuery简介 二.jQuery安装 三.jQuery语法 四.jQuery选择器 五.jQuery事件 六.jQuery效果-隐藏和显示 七.jQuery效果-淡入淡出 八.滑动 ...

  2. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  3. 使用XML创建Excel文档

    使用XML创建Excel文档            原例子使用VB.Net写的,以下的用C#改写的代码 原文代码: http://www.gotdotnet.com/Community/UserSam ...

  4. XML教程和SVG可伸缩矢量图形 (Scalable Vector Graphics)教程

    XML教程 http://www.woyouxian.net/xml/xml_index.html 写的很好诶 SVG教程 http://www.woyouxian.net/z/web/svg/ind ...

  5. xml教程之约束schema

    1.简介 XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: XML Schema符合XML语法结 ...

  6. python电玩城源码_2019最新最全价值2W的微信H5电玩城游戏全套源码+架设教程+配置文档...

    2019最新最全价值2W的微信H5电玩城游戏全套源码+架设教程+配置文档由小鱼H5游戏源码精心整理,并分享给大家.喜欢该资源的小伙伴请下载使用,注册.回复.每日签到.点赞送大量积分,满足您免费下载的愿 ...

  7. Blender全新开源动画短片官方灯光渲染教程,文末附高清参数截图+专家级灯光渲染建议

    看了么?看了么!Blender Studio官方上周发布了2021年全新开源动画短片<Sprite Fright(精灵惊魂记)>. 今年的影片用Blender 3.0制作(Blender ...

  8. [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  9. ROS2机器人应用简明教程01文档

    学习ROS2机器人操作系统第一步要做什么呢?下载最新的官方文档到本地: 在github搜索ros2_documentation,使用git或者浏览器下载均可. 使用说明: 下载的文档需要编译才可使用, ...

最新文章

  1. 屏幕输出语句_2.2 数据输入与输出
  2. mysql的数据类型以及性能优化
  3. PNaCl:Google通过LLVM增强对Chrome中原生应用的支持
  4. css中怎么令dt 和 dd对齐
  5. 关于idea右侧的maven project 如何调出来
  6. 前端学习(3061):vue+element今日头条管理-接口分页参数说明
  7. 台积电南京12寸厂址 落脚江北新区
  8. 计算机与科学a,[第一单元] 计算机与计算机科学-课文A参考译文
  9. Keil开发软件的使用详解
  10. vscode下载历史版本
  11. CAS4 之 集成RESTful API
  12. Android音视频【五】H265/HEVC码流结构
  13. 团建游戏------走迷宫
  14. 淘宝API-item_search - 按关键字搜索淘宝商品
  15. 服务器96g运行内存,别被坑了,2019入手小米9到底选择6G运存还是8G?看完你就懂了!...
  16. 克制授信,蚂蚁集团将严控年轻人额度
  17. Win10、Win7系统,电脑蓝屏,什么原因怎么解决?一篇文章彻底解决!
  18. 计算二维空间某点的最近k 个点
  19. Beta测试与Alpha测试的区别?
  20. mysql和高斯DB的区别

热门文章

  1. 最新车载以太网解决方案
  2. 二、执行v8引擎示例代码
  3. 微软OpenPAI平台搭建指南
  4. CentOS Stream 8 安装Oracle 19C (静默模式)
  5. java套娃_Java也有俄罗斯套娃,内部类剖析
  6. ESP32学习笔记(45)——DAC接口使用
  7. Redis系列之——Redis-Cluster
  8. PHP单例模式 构造方法
  9. uni-app如何使用vant-ui的坑
  10. 中文文本分析, Text-Analysis