您当前的位置: 首页 > 学无止境 > XML与XSLT 网站首页XML与XSLT
xml笔记-CDATA的使用与文档元素的限制(dtd的使用)
发布时间:2015-03-27 21:53:17编辑:雪饮阅读()
cdata的使用:
xml源代码如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<班级>
<stu stuno="a0'0"1" stuno2="t-001">
<name>孙悟空</name>
<sex>男</sex>
<age>500</age>
<xiao><![CDATA[$<>.,><*%$#^%$^%$^①②③Ψ《》《,]]></xiao>
<介绍/>
</stu>
<stu>
<name>白骨精!^$@</name>
<sex>女</sex>
<age>100</age>
</stu>
</班级>
解析:
有时候我们在xml中有特殊字符嵌入标签的需求,但是并非所有的特殊字符都可以直接存放与xml标签中,例如我们需要存放一个“<”而该字符直接嵌入会使得xml解析器做为标签的一部分来处理。如此以来我们的xml解析器自然是会报错的。
那么:
<xiao><![CDATA[$<>.,><*%$#^%$^%$^①②③Ψ《》《,]]></xiao>
此句中我们使用了cdata来嵌入某些特殊字符,这样解析器就不会将其结果正常处理的。但我们需要注意的是xml解析器在不同浏览器中的解析结果是不同的
在ie中会将该标签中的所有内容解析,而在火狐中却只解析cdata中的内容。
dtd的使用:
xml源代码如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE 班级 SYSTEM "yuesu.dtd">
<班级>
<学生>
<名字>孙悟空</名字>
<年龄>500</年龄>
<介绍>学习刻苦</介绍>
<面积>20</面积>
</学生>
<学生>
<名字>林青霞</名字>
<年龄>32</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
解析:
使用dtd可以对xml中标签加以限制,例如我们可以通过dtd来限制xml文档中不能出现那些标签。
我们仔细观察上面的xml标签会发现“面积”在该文档中极不协调,于是我们引入dtd文档来加以限制:
<!DOCTYPE 班级 SYSTEM "yuesu.dtd">
该代码便是引入dtd文档来限制该xml文档的语句,“班级”就是要限制文档的根标签,system代表是从本地中引入dtd来限制。我们经常使用dreamwerver来做网页时会发现新建html后文档中有引入dtd限制的语句中是一个远程获取dtd来加以限制的。
dtd源代码:
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
解析:
该文档中并没有“面积”,那么之前的xml中“面积”是不被允许的,但此时去运行xml于浏览器中解析,并没有任何效果,我们引入的dtd限制,但还需要一个中间人利用这个dtd文档对xml进行处理。
html源代码:
<html>
<head>
<title>测试dtd</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script language="javascript">
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.validateOnParse = true;
xmldoc.load("class2.xml");
document.write("错误信息="+xmldoc.parseError.reason+"<br/>");
document.write("错误的行号="+xmldoc.parseError.line);
</script>
</head>
</html>
解析:
该文档才是真正处理xml的文档,它以dtd文件为依据来对xml做处理。
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
创建一个xml解析对象
xmldoc.validateOnParse = true;
开启验证
xmldoc.load("class2.xml");
载入验证对象,就是我们上面需要dtd验证的xml
document.write("错误信息="+xmldoc.parseError.reason+"<br/>");
document.write("错误的行号="+xmldoc.parseError.line);
验证之后在文档中显示验证结果。如下图所示:
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");该语句仅创建了基于ie的解析器对象,所以该验证仅在ie中有效,我们若要做的更严谨些就需要对其在各主流浏览器中创建对象的语句加以判断。
关键字词:dtd,cdata,个人博客