xml调用问题大家好:我刚接触xml,遇到这样一个问题:第一个文件:classes2.dtd!ELEMENT 班级(学生+)!ELEME
xml调用问题
大家好:
我刚接触xml,遇到这样一个问题:
第一个文件:classes2.dtd
<!ELEMENT 班级(学生+)>
<!ELEMENT 学生(名字,年龄,介绍)>
<!ELEMENT 名字(#PCDATA)>
<!ELEMENT 年龄(#PCDATA)>
<!ELEMENT 介绍(#PCDATA)>
第二个文件:classes2.xml
<?xml version="1.0" encoding="utf-8"?>
<!--一定要保证文件的保存的编码方式和utf-8一致-->
<!--引入dtd-->
<!DOCTYPE 班级 SYSTEM "classes2.dtd">
<班级>
<学生>
<名字>li</名字>
<年龄>50</年龄>
<介绍>1班</介绍>
<面积>20</面积>
</学生>
<学生>
<名字>张</名字>
<年龄>80</年龄>
<介绍>2班</介绍>
</学生>
</班级>
第三个文件:checkDtd.html
<html>
<head>
<title>测试dtd</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script language="javascript">
<!--
//window.alert("ok");
//创建一个xml解析器
var xmldoc =new ActiveXObject("Microsoft.XMLDOM");
//开启校验功能
xmldoc.validateOnParse =true;
//指定对哪个xml文件校验
xmldoc.load("classes2.xml");
//如果有错误信息,则输出
document.write("错误信息="+xmldoc.parseError.reason+"<br/>");
document.write("错误的行号="+xmldoc.parseError.line+"<br/>");
//-->
</script>
</head>
</html>
执行checkDtd.html文件结果如下:
错误信息=
错误的行号=0
【问题】为什么checkDtd.html文件没有报错呢?请教
[最优解释]
根据你提供的代码,我执行以后,是有报错的,错误提示如下:
错误信息=根据 DTD/Schema,元素内容无效。
错误的行号=10
[其他解释]
版主,我今天又执行了一下以上代码,是有报错了,但是报的怎么和你的不同呀?错误信息如下:
错误信息=缺少所需的空白区。
错误的行号=1
这是为什么?昨天也是这个代码,怎么也说没错,今天报错了,但是报的又不对,这跟浏览器的设置有关系吗?我也没有对浏览器做过特殊操作呀?
[其他解释]如果在checkDtd.html文件直接单击右键的话,打开的网页,报错就是:
错误信息=缺少所需的空白区。
错误的行号=1
如果在浏览器中输入此程序的位置:http://localhost/mycode/xml/checkDtd的话,出现的提示信息就是:
错误信息=
错误的行号=0
而且,我用了ie8、360、firfox都没有出现您说的报错,是为什么呀
[其他解释]哦,忘了告诉你了,你的DTD有2处错误,我做了修正。
1,<!ELEMENT 班级(学生+)>,班级和(学生+)中间要有空格。
正确为<!ELEMENT 班级 (学生+)>
2,<!ELEMENT 学生(名字,年龄,介绍)>,同上空格错误,并且“(”与“)”错误。这两个是全角括号,正确应为半角括号。
你修正了这两个问题后,再执行就能出现我上面列出的问题了。
[其他解释]调试出来啦,谢谢版主
[其他解释]版主,还是不太清楚一个问题,就是我用的是xampp软件,所有的代码都是由这个软件来运行,但是为什么在checkDtd.html文件直接单击右键的话,打开的网页,现则报错正确;
但是如果在浏览器中输入此程序的位置:http://localhost/mycode/xml/checkDtd的话,出现的提示信息就是:
错误信息=
错误的行号=0
为什么呀?难道是xml无法再apache中运行吗?还是需要配置呀?我在网上也没搜出个所以然啦,先在此表示感谢啦
[其他解释]
应该是异步问题。
你在xmldoc.load("classes2.xml");
前面加上一句xmldoc.async=false;
[其他解释]
恩,确实是这个问题,加上您说的这句后,在apache下也报错了,您说的很对,再问一句,这是什么异步问题呀?大体给我介绍一下,可以吗?
[其他解释]xmldoc有个属性async,用来设置同步读取或异步读取。
如果是同步读取(即false),则是等待XML加载完成后,再执行下一条语句。
异步读取则是无论XML是否加载完成,都直接执行下一条语句。
因此,如果不是设置false,XML尚未载入完成,以下的判断都无从说起了。
[其他解释]恩恩,谢谢您