XML教程~一文完结

前言:

     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文件结构。 

猜你喜欢

转载自blog.csdn.net/qq_43919400/article/details/106864309