【问题标题】:Javascript forEach not working when looping through JSON parsed XML with 1 childnode?使用 1 个子节点循环通过 JSON 解析 XML 时,Javascript forEach 不起作用?
【发布时间】:2016-10-01 04:05:45
【问题描述】:

我有一个具有以下结构的 XML 文件:

<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 不起作用。有人可以向我解释为什么和/或提供一种替代解决方案/方法来遍历此类文件吗?

【问题讨论】:

  • XML 不是 JSON ?
  • 你应该显示 JSON,而不是 xml
  • 不知道行的对象类型,如何查看?我正在从元素节点(也可以有子节点)中的数据构建一个 div。我现在的解决方案是检查有多少行孩子;如果只有 1 我直接抓取它,如果超过 1 我通过 forEach 遍历它们。这可行,但在我看来不是很有效。
  • @ILE 您可能希望包含一个只有一行的 XML 样本。此外,我们必须假设您在这里发生了一些 XML -> JSON 转换,并且它可能被配置为转换具有这样一个元素的数组

标签: javascript json xml


【解决方案1】:

现在检查子节点的数量

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

它允许我访问每个子节点的数据,而不管 nodex 的数量。

【讨论】:

    【解决方案2】:

    我建议您将其解析为文档,而不是将 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 行。如果您需要额外的解释,请告诉我。

    【讨论】:

    • 感谢您的建议,但考虑到目前的进展,改变解析方法并不是一个真正的选择..
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多