/**
**@author:APan
**/
在接觸html時晶衷,網(wǎng)頁的前面幾行都有這么一行<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
其實這個就是對dtd文件的應(yīng)用嗽元,那dtd文件有什么用處呢?
dtd定義:文檔類型定義(DTD)可定義合法的XML文檔構(gòu)建模塊掠兄。它使用一系列合法的元素來定義文檔的結(jié)構(gòu)像云。DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用蚂夕。(來自百度)
說白了dtd就是定義你的xml文件中可以有哪些元素迅诬,不可以有哪些元素,這些元素可以的值是什么類型的婿牍。但是我們直接查看xml文件他并不會報錯侈贷,需要禁用js創(chuàng)建一個ActiveXObject對象,才可以對其進行校驗等脂。
接一下來我們詳細看看DTD是如何工作的:(請注意區(qū)分文件后綴)
從代碼開始Checkdtd.htm文件(檢測xml是否規(guī)范)代碼:
//開始
<html>
<head>
<title>測試dtd文檔</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312" />
<script type="text/javascript">
//創(chuàng)建一個xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//開啟校驗功能
xmldoc.validateOnParse=true;
//指定對那個xml文件校驗
xmldoc.load("myblog.xml");
//顯示錯誤的信息
document.write("錯誤信息="+xmldoc.parseError.reason+"<br />");
document.write("錯誤的行號"+xmldoc.parseError.line+"<br />");
</script>
</head>
<body>
</body>
</html>
需要檢測的xml文件(myblog.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE class SYSTEM "mydtd.dtd">
<class>
<stu>
<name>Jimmy</name>
<sex>man</sex>
<age>19</age>
</stu>
<stu>
<name>Tommy</name>
<sex>women</sex>
<age>20</age>
</stu>
<stu>
<name>Ketty</name>
<sex>women</sex>
<age>21
</stu>
</class>
定義規(guī)范的dtd文件(mydtd.dtd)
<!ELEMENT class (stu+)>
<!ELEMENT stu (name,sex,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
從htm代碼開始說俏蛮,這里第一句話的意思就是創(chuàng)建一個檢測xml文件的對象,并命名為xmldoc變量上遥,然后開啟了檢驗的功能搏屑,再然后我們確定需要校驗的xml文件,如果不在同一個目錄下可以用相對路徑或者絕對路徑的方法找到xml文件粉楚。如果有錯誤那我們則把錯誤找出并現(xiàn)在在頁面上睬棚,很容易理解。
接著我們看看xml文件,其中有句話是加載dtd的文件:<!DOCTYPE class SYSTEM "mydtd.dtd">其中定義的格式規(guī)范為:
<!DCTYPE 根元素名 SYSTEM "寫dtd的路徑">
<!DCTYPE 根元素名 [dtd元素內(nèi)容]>
因為我們這里的根元素是class 且mydtd.dtd和myblog是同一個目錄所以最后路徑為:<!DOCTYPE class SYSTEM "mydtd.dtd">
最后分析一下mydtd.dtd文件:
元素的定義格式為:
<!ELEMENT 元素名稱 (元素內(nèi)容)>
如果是空元素則可以這樣定義:
<!ELEMENT 元素名稱 EMPTY>
這里我們看到在根元素下面有很多的stu元素抑党,所以<!ELEMENT class (stu+)>
其中+的意思stu這個元素的個數(shù)為1到n如果是*則stu的元素的個數(shù)為0到n
其他具體的修飾符這里就不列舉了(有需要的話去官網(wǎng)查一下)。
接著我們看到stu元素下面有name撵摆、sex底靠、age 3個元素所以我們定義<!ELEMENT stu (name,sex,age)>
如果你去掉其中一個stu下面的一個age則用Checkdtd.htm會提示錯誤。我就不測試了特铝。
對了暑中,最后一句的意思是<!ELEMENT name (#PCDATA)>定義name這個元素的的數(shù)據(jù)類型可以為字符串。
PS:向媳婦兒推薦一款遠程控制軟件鲫剿,Teamviewer鳄逾,手機和電腦同時下載,非商業(yè)用途的話軟件免費灵莲,可以用安裝了此軟件的手機或電腦控制安裝此軟件的電腦(前提是電腦未關(guān)機且應(yīng)用為開啟狀態(tài))雕凹,國外應(yīng)該也是能用的,不能用別殺我政冻。枚抵。。