Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法动态分析XML_Javascript_Xml_Dom_Xml Parsing - Fatal编程技术网

Javascript 无法动态分析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";

在下面的JavaScript代码中,它适用于第一个循环,但对于第二个循环,它始终显示y.length等于0,并且从不进入循环。y.length不是零,我的xml文件有很多东西。我尝试过调试,但无法进一步调试。任何帮助都将不胜感激

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”; var响应=”; var sid=x[i]。getElementsByTagName(“id”)[0]。子节点[0]。节点值; $.ajax({ 键入:“获取”, url:“../sitman/requests/get_impact_nodes.cgi?sid=“+sid, async:false, 成功:函数(文本){ 响应=文本; } }); 试一试{ xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”); xmlDoc.async=“false”; loadXML(响应); }捕获(e){ 试一试{ parser=新的DOMParser(); xmlDoc=parser.parseFromString(响应,“text/xml”); }捕获(e){ 警报(e.message); 返回; } } 变量y=xmlDoc.getElementsByTagName(“神话”); 对于(var j=0;j”; } } } } 下面是y的XML

<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")