2016-10-01 13 views
-2

我有具有以下结构的XML文件:通过JSON解析带有1个子节点的XML时,Javascript forEach不起作用?

<output> 
    <count> 
    </count> 
    <rows> 
    <row> 
     <element1></element1> 
     <element2></element2> 
     <element3></element3> 
     <element4></element4> 
    </row> 
    <row> 
     <element1></element1> 
     <element2></element2> 
     <element3></element3> 
     <element4></element4> 
    </row> 
    </rows> 
</output> 

我请求通过AJAX从PHP文件,并将它(响应)加载到一个变量:

var xml=JSON.parse(response); 

接下来,我要循环通过它来抓取数据。我注意到,当行节点的数量> 1,我可以做例子:

var list=[]; 
xml.output.list.rows.row.forEach(function(item) 
{ 
    list.push(item.element1); 
}); 

但是,如果只有1行节点,这的forEach不起作用。有人能向我解释为什么和/或提供替代解决方案/方法来遍历这样的文件?

+3

XML ***不是*** JSON? – adeneo

+0

你应该显示JSON,而不是xml –

+0

我不知道行的对象类型,我该如何检查?我正在构建元素节点(也可以有子节点)中的数据。现在我的解决方案是检查有多少行孩子;如果只有1我直接抓住它,如果超过1我通过forEach遍历它们。这是有效的,但我认为效率不高。 – ILE

回答

-1

除了将XML解析为JSON,我建议您将它解析为文档。以下是一个示例代码

var testXML = "<output><count></count><rows><row><element1>asd</element1></row><row><element1>zz</element1><element2>xx</element2></row></rows></output>"; 

var parser = new DOMParser(); 
var doc = parser.parseFromString(testXML, "text/xml"); 
var rows = doc.getElementsByTagName('row'); 

for(var i = 0; i < rows.length; i++) { 

    console.log(rows[0]); 
}; 

它在所选行内打印出2行。如果您需要额外的解释,请告诉我。

+0

感谢您的建议,但考虑到进度,更改解析方法并不是一种真正的选项至今.. – ILE

0

现在正在检查子节点的数量与

for (childnode in xml.output.rows.row) 

,让我来访问每个childnode的数据,而不管节点X的量。