关于xml dom,不能load文件的问题。

jojo_m 2008-08-08 11:01:42
各位大虾,小弟用的是vista home basic系统,想用javascript操作xml文件,查阅网上的资料,写了一个简单程序,但是始终不能load这个xml文件,很纳闷,程序代码如下:

window.onload=buildTree;

function buildTree(){
var file_path = "treeSrc.xml";
var xmlDoc;
try{
xmlDoc = loadXMLDoc(file_path);
}
catch(e){
alert("对不起," + e.message);
}

alert(typeof xmlDoc);
alert(xmlDoc.doctype);
}
function loadXMLDoc(file_path){
var xmlDoc;
var analyzers = ["MSXML2.DOMDocument.5.0",
"MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0",
"MSXML2.DOMDocument",
"Microsoft.XmlDom"];
if(window.ActiveXObject){
for(var i=0; i < analyzers.length; i++){
try{
xmlDoc = new ActiveXObject(analyzers[i]);
xmlDoc.async = false;
xmlDoc.load(file_path);
return xmlDoc;
}
catch(e){
}
}
}
else if(document.implementation && document.implementation.createDocument){
xmlDoc = document.implementation.createDocument("","",null);
xmlDoc.async = false;
xmlDoc.load(file_path);
return xmlDoc;
}
throw new Error("该浏览器无法执行该程序!");

}

其中,文件"treeSrc.xml"和这个js文件以及调用js的html文件在同一目录,这个程序在myEclipse和IE,Opera里运行的结果都是object和null,也就是创建了xmlDoc这个Object,但没有load文件。
另外刚才在xp系统上也试了一下,同样的结果。
查阅过网上资料,程序差不多都是这么写的,没提到load这个问题。
小弟javascript刚起步,请各位大虾之间迷津,不胜感激。
若有哪里描述不清的,请指出。
在线等。。。
跪谢
...全文
353 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大虾哥哥 2008-08-08
  • 打赏
  • 举报
回复
那你的xml开始有什么问题?导致不能正常load
jojo_m 2008-08-08
  • 打赏
  • 举报
回复
回复yonghengdexingxing:

真的是xml文件的问题,谢谢你,谢谢各位刚忙
MyTools_Studio 2008-08-08
  • 打赏
  • 举报
回复
我在IE7下正常显示xml文件内容啊,检查下你的xml文件

treeSrc.xml

<?xml version="1.0"?>
<root>
<item>The Item</item>
</root>



<script type="text/javascript">
window.onload=buildTree;

function buildTree(){
var file_path = "treeSrc.xml";
var xmlDoc;
try{
xmlDoc = loadXMLDoc(file_path);
}
catch(e){
alert("对不起," + e.message);
}

alert(typeof xmlDoc);
alert(xmlDoc.xml);
}
function loadXMLDoc(file_path){
var xmlDoc;
var analyzers = ["MSXML2.DOMDocument.5.0",
"MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0",
"MSXML2.DOMDocument",
"Microsoft.XmlDom"];
if(window.ActiveXObject){
for(var i=0; i < analyzers.length; i++){
try{
xmlDoc = new ActiveXObject(analyzers[i]);
xmlDoc.async = false;
xmlDoc.load(file_path);
alert(xmlDoc.xml);
return xmlDoc;
}
catch(e){
}
}
}
else if(document.implementation && document.implementation.createDocument){
xmlDoc = document.implementation.createDocument("","",null);
xmlDoc.async = false;
xmlDoc.load(file_path);
return xmlDoc;
}
throw new Error("该浏览器无法执行该程序!");

}
</script>

[Quote=引用 2 楼 jojo_m 的回复:]
换成alert(xmlDoc.xml);之后显示的是空白
[/Quote]
MyTools_Studio 2008-08-08
  • 打赏
  • 举报
回复
LZ用的是同步模式 ...

[Quote=引用 3 楼 changke18 的回复:]
xmlDoc.load(file_path);
这句意思是加载xml文件,但不一定直接就加载完毕了。
所以必须在得反复判断加载得状态,知道加载完毕了,才能访问xml的实际内容。

参考
var xmlDoc;
function hehe()
{
if(window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange=function()
{
if(xmlDoc.readyState==4)
{

[/Quote]
jojo_m 2008-08-08
  • 打赏
  • 举报
回复
回复changke18:

还是不行。。。
onreadystatechange函数,是检查xmlDoc是不是ready,如果不是的话这个方法if里面的语句就被跳过了,
你说要反复判断,这里貌似没有反复的过程
西安风影 2008-08-08
  • 打赏
  • 举报
回复
xmlDoc.load(file_path);
这句意思是加载xml文件,但不一定直接就加载完毕了。
所以必须在得反复判断加载得状态,知道加载完毕了,才能访问xml的实际内容。

参考
var xmlDoc;
function hehe()
{
if(window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange=function()
{
if(xmlDoc.readyState==4)
{
handleXmlDoc();
}
}

xmlDoc.load("data.xml");
}
else if(document.implementation&&document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument('','',null);
xmlDoc.onload=handleXmlDoc;
xmlDoc.load("data.xml");
}
}
function handleXmlDoc()
{
alert(xmlDoc);
}

加载xml和ajax有点类似,需要判断状态。
jojo_m 2008-08-08
  • 打赏
  • 举报
回复
换成alert(xmlDoc.xml);之后显示的是空白
MyTools_Studio 2008-08-08
  • 打赏
  • 举报
回复
你的xml应该已经load了

你把alert(xmlDoc.doctype);换成alert(xmlDoc.xml);看看

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧