Javascript 无法动态分析XML
在下面的JavaScript代码中,它适用于第一个循环,但对于第二个循环,它始终显示y.length等于0,并且从不进入循环。y.length不是零,我的xml文件有很多东西。我尝试过调试,但无法进一步调试。任何帮助都将不胜感激Javascript 无法动态分析XML,javascript,xml,dom,xml-parsing,Javascript,Xml,Dom,Xml Parsing,在下面的JavaScript代码中,它适用于第一个循环,但对于第二个循环,它始终显示y.length等于0,并且从不进入循环。y.length不是零,我的xml文件有很多东西。我尝试过调试,但无法进一步调试。任何帮助都将不胜感激 function myXML(myText, myTarget) { try { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false";
function myXML(myText, myTarget) {
try {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(myText);
} catch (e) {
try {
parser = new DOMParser();
xmlDoc = parser.parseFromString(myText, "text/xml");
} catch (e) {
alert(e.message);
return;
}
}
var x = xmlDoc.getElementsByTagName("myThing");
for (var i = 0; i < x.length; i++) {
if (x[i].getElementsByTagName("firstItem")[0].hasChildNodes) {
document.getElementById(target).innerHTML = document.getElementById(myTarget).innerHTML + x[i].getElementsByTagName("secondThing")[0].childNodes[0].nodeValue + " - " + x[i].getElementsByTagName("firstItem")[0].childNodes[0].nodeValue + "<br>";
var response = "";
var sid = x[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;
$.ajax({
type: "GET",
url: "../sitman/requests/get_affected_nodes.cgi?sid=" + sid,
async: false,
success: function(text) {
response = text;
}
});
try {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(response);
} catch (e) {
try {
parser = new DOMParser();
xmlDoc = parser.parseFromString(response, "text/xml");
} catch (e) {
alert(e.message);
return;
}
}
var y = xmlDoc.getElementsByTagName("myThing");
for (var j = 0; j < y.length; j++) {
document.getElementById(myTarget).innerHTML = document.getElementById(myTarget).innerHTML + y[j].getElementsByTagName("myname")[0].childNodes[0].nodeValue + "<br>";
}
}
}
}
函数myXML(myText,myTarget){
试一试{
xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
loadXML(myText);
}捕获(e){
试一试{
parser=新的DOMParser();
xmlDoc=parser.parseFromString(myText,“text/xml”);
}捕获(e){
警报(e.message);
返回;
}
}
var x=xmlDoc.getElementsByTagName(“神话”);
对于(变量i=0;i<xml>
<entries>
<myThing>
<myName>xxx</myName>
<test1>test8</test1>
<test2>test6</test2>
</myThing>
<myThing>
<myName>xxx</myName>
<test1>test2</test1>
<test2>test3</test2>
</myThing>
</entries>
</xml>
xxx
测试8
测试6
xxx
测试2
测试3
注意到您的代码中有几个问题。首先,您正在访问此行中的未定义变量目标:
document.getElementById(target).innerHTML = document.getElementById(myTarget).innerHTML + x[i].getElementsByTagName("secondThing")[0].childNodes[0].nodeValue + " - " + x[i].getElementsByTagName("firstItem")[0].childNodes[0].nodeValue + "<br>";
但响应已经是一个XML对象。您可以将整个部分替换为:
xmlDoc = response;
最后,在y上的最后一个for循环中,您得到了以下调用:
y[j].getElementsByTagName("myname")
但是在XML中,元素的名称实际上是myName
我已经创建了一个测试服务器,修复了所有这些问题,对我来说,它似乎工作正常,所以我认为这就是您需要修复的所有问题。
y
等于0
???你的意思是y.length==0
?只需使用数据类型:“xml”
,不要启动自己的DOMParser
?(顺便说一句,ActiveX应该是标准DOMParser的后备方法,而不是相反)是的,我指的是y.length。我会纠正这一点,但仍然不起作用。console.log(xmlDoc)
向您显示了什么,可能是解析错误?是的,它显示了解析错误。文档是空的。谢谢你,james target和myname都是打字错误,我把这些都纠正了,但在我用xmlDoc=response替换了try catch之后;它工作了,只是没有寻找所有的x,我会尝试找出。无论如何,谢谢你。
y[j].getElementsByTagName("myname")