XML与DTD的相互关系。

我学XML还没几天,学习资料是从书店里选了半天才选出来的,看了两天后我对XML有了一个模糊的轮廓形成了一个这样的概念:XML文件中的各元素和属性必须要事先在内部或外部的DTD文件中声明后才可用,DTD是用来约束XML的,我把这一点当做一条基本的准则,但今天我遇到的问题却把我懵傻了,我发现一个XML文件即使没有任何的DTD声明也一样可以正常显示,IE也不会报错如下面的:

1<users>
2<name>gzw</name>
3<pass>676767</pass>
4<passanser>nlnl</passanser>
5</users>

后来我又发现即使在你的XML文件中有一个外部声明,只要你同时在这个XML文件的相同目录中新建一个没有任何内容的DTD文件还是不会有错如下面:

1<users>
2<name>gzw</name>
3<pass>676767</pass>
4<passanser>nlnl</passanser>
5</users>

你只要在相同目录新建一个没有任何内容的空的"a.dtd"文件IE也不会报错,显示正常。

进一步看,即使你有一个如下的DTD文件("a.dtd")

你也仍然可以在你的XML文件中添加任何并未在DTD文件中声明过的元素如下

 1<aa>元素是从未声明过的但仍可使用:   
 2<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 3<!DOCTYPE users SYSTEM "a.dtd">
 4
 5<users>
 6<name>gzw</name>
 7<pass>676767</pass>
 8<passanser>nlnl</passanser>
 9<aa>DFSDFS</aa>
10</users>   
11  
12我倒!这到底是怎么回事啊,谁能给我一个明确的答案   
13\---------------------------------------------------------------   
14  
15ie仅仅判断xml文件是否well-formed,并没有严格得判断它的对与错!   
16\---------------------------------------------------------------   
17  
18IE does not validate an XML file by default, use scripting to do it, for example, you can do this in javascript:   
19  
20var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");   
21xmlDoc.async = false;   
22xmlDoc.validateOnParse = true;   
23xmlDoc.load("books.xml");   
24var myErr = xmlDoc.parseError;   
25if (myErr.errorCode != 0)   
26{   
27alert("You have error " + myErr.reason);   
28}</aa>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus