【问题标题】:Javascript getting XML node names loop does not stop获取 XML 节点名称的 Javascript 循环不会停止
【发布时间】:2019-07-28 07:50:26
【问题描述】:

我有一个如下所示的 XML 文件:

<ROWSET>
   <ROW>
      <option1> lala </option1>
      ...
      <option39> lolo </option39>
   </ROW>
   <ROW>
      <option1> baba </option1>
      ...
      <option39> bobo </option39>
   </ROW>
   ...
</ROWSET>

该文件总共包含 840 行。我现在有一些 javascript 代码可以获取节点名称(“option1”、“option2”、...、“option39”)并通过 console.log 打印它们。

代码如下:

var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");

for (var i = 0; i < 1; i++) {
    for (var j = 0; j < (eigenschaften * 2); j++) {
        var reihe = reihen[i].childNodes[j];

        if (reihe.nodeType === 1)
            console.log(reihe.nodeName + j + " " + i);
        }
    }

eigenschaften = 39(每行的节点数量)。

不幸的是,在给我 39 个节点名称后它并没有停止;它会一直持续到我的浏览器崩溃。如何结束循环?出于某种原因,它不会在 i > 1 之后停止,它只是在 i = 0 时继续。

所以在它给了我“option39”之后,它立即以“option1”重新开始。

感谢您的帮助:)

【问题讨论】:

  • 你为什么要乘以 2?
  • 如果我不这样做,出于某种原因,它只能获得一半的选项。

标签: javascript xml loops parsing


【解决方案1】:

听起来代码中还有其他我们看不到的东西导致了问题。但在我看来,您应该只引用长度并在循环中使用它而不是带有数字的变量。

var xmlStr = `<?xml version="1.0"?>
<ROWSET>
   <ROW>
      <option1> lala1 </option1>
      <option2> lala2 </option2>
      <option3> lala3 </option3>
      <option4> lala4 </option4>
      <option5> lala5 </option5>
      <option39> lolo </option39>
   </ROW>
   <ROW>
      <option1> baba1 </option1>
      <option2> baba2 </option2>
      <option3> baba3 </option3>
      <option4> baba4 </option4>
      <option5> baba5 </option5>
      <option39> bobo </option39>
   </ROW>
</ROWSET>`


var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")


//var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");
for (var i = 0; i < reihen.length; i++) {
  var rowChildren = reihen[i].childNodes
  for (var j = 0; j < rowChildren.length; j++) {
    var reihe = rowChildren[j];
    if (reihe.nodeType === 1)
      console.log(reihe.nodeName + ' ' + j + " " + i);
  }
}

只读取第一行

var xmlStr = `<?xml version="1.0"?>
<ROWSET>
   <ROW>
      <option1> lala1 </option1>
      <option2> lala2 </option2>
      <option3> lala3 </option3>
      <option4> lala4 </option4>
      <option5> lala5 </option5>
      <option39> lolo </option39>
   </ROW>
   <ROW>
      <option1> baba1 </option1>
      <option2> baba2 </option2>
      <option3> baba3 </option3>
      <option4> baba4 </option4>
      <option5> baba5 </option5>
      <option39> bobo </option39>
   </ROW>
</ROWSET>`


var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")


//var xmlDoc = xml.responseXML;
var reihen = xmlDoc.getElementsByTagName("ROW");
var rowChildren = reihen[0].childNodes
for (var j = 0; j < rowChildren.length; j++) {
  var reihe = rowChildren[j];
  if (reihe.nodeType === 1)
    console.log(reihe.nodeName + ' ' + j);
}

【讨论】:

  • 谢谢!因此,通过您的修改,它仍然会像存在行一样频繁地提供所有选项。我怎样才能获得每个选项一次?
  • 您只想要选项名称?以为您正在尝试遍历所有行....而不是仅引用第一行....
  • 这就是我试图用第一个 for 循环做的,但它没有工作......
  • 由于某种原因这不起作用...可能与我使用var xmlDoc = xml.responseXML而不是var xmlDoc = new window.DOMParser().parseFromString(xmlStr, "text/xml")有关吗?
  • 好的。但我仍然无法让它在第一排之后停止......我现在应该但它没有
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多