2016-02-28 140 views
-1

我工作代码(下)在谷歌文档中阅读XML。它的工作原理马丽娟如果XML看起来是这样的(部分我感兴趣的):谷歌文档和XML阅读

<row orderID="4452813795" charID="96255569" stationID="60011752" volEntered="1" volRemaining="1" minVolume="1" orderState="0" typeID="11134" range="32767" accountKey="1002" duration="90" escrow="0.00" price="20000.00" bid="0" issued="2016-02-28 02:05:29"/> 

我要的是volRemaining值和我的代码返回1.但是,如果XML是这样的:

<row orderID="4452813795" charID="96255569" stationID="60011752" volEntered="1" volRemaining="1" minVolume="1" orderState="0" typeID="11134" range="32767" accountKey="1002" duration="90" escrow="0.00" price="20000.00" bid="0" issued="2016-02-28 02:05:29"/> 
<row orderID="4452814032" charID="96255569" stationID="60011752" volEntered="1" volRemaining="1" minVolume="1" orderState="0" typeID="11134" range="32767" accountKey="1002" duration="90" escrow="0.00" price="20000.00" bid="0" issued="2016-02-28 02:05:47"/> 

代码仍然返回1.我需要的是从两行中添加这些值,以便在这种情况下代码返回2(可能会有更多行像这些,代码需要检查orderState =“0”)。

这是我的代码:

function getLevelByTypeFromRowset(rowset, id) 
{ 
    var rows = rowset.getChildren("row"); 
    var level=null; 
    var level2=0; 
    for (var i=0;level==null && i<rows.length;i++) 
    { 
     var row=rows[i]; 
     var typeIdAttr=row.getAttribute("typeID"); 
     if (typeIdAttr && typeIdAttr.getValue()==id && row.getAttribute("orderState").getValue()==0) 
     { 
      level2=level2 + row.getAttribute("volRemaining").getValue(); 

      if (i = rows.length){ 
      level=level2; 
      } 
     } 
    } 
    return level; 
} 
function TradeVolume(id) { 
    //id=3389; 
    var idd="orders"; 
    var url = "http://some.url.com"; 
    var document = readXml(url); 
    var level = null; 
var rowsets = document.getRootElement().getChild("result").getChildren("rowset"); 
for (var i=0;level==null && i<rowsets.length;i++) 
{ 
    var rowset=rowsets[i]; 
    var typeIdAttr=rowset.getAttribute("name"); 
     if (typeIdAttr && typeIdAttr.getValue()==idd) 
     { 
    level=getLevelByTypeFromRowset(rowset, id); 
     } 
} 
    if (level==null){ 
    level = 0 
    } 
    return parseFloat(level); 
} 

我一直在试图做3小时,不能与任何想法来到了...

编辑:

工作代码:

function getLevelByTypeFromRowset(rowset, id) 
{ 
    var rows = rowset.getChildren("row"); 
    var level=0; 
    for (var i=0;i<rows.length;i++) 
    { 
     var row=rows[i]; 
     var typeIdAttr=row.getAttribute("typeID"); 
     if (typeIdAttr && typeIdAttr.getValue()==id && row.getAttribute("orderState").getValue()==0) 
     { 
      level=parseInt(level) + parseInt(row.getAttribute("volRemaining").getValue()); 
     } 
    } 
    return level; 
} 

回答

1

一个问题是if (i = rows.length)。你在那里做一个任务,你明显想要测试平等。该分配会导致循环条件为假,因此循环会尽早终止。

因此,您可以将if条件更改为if (i == rows.length)。但是,该测试永远不会成立,因为循环条件包括&& i<rows.length。也许你的意思是说if (i == rows.length - 1),这样if的主体会在循环的最后一个循环中执行?但是,如果最后row满足

(typeIdAttr && typeIdAttr.getValue()==id && row.getAttribute("orderState").getValue()==0) 

,我不认为这是你想要的它只会发生。

真的是我希望你的意思是移动

 if (i == rows.length - 1) { 
     level = level2; 
     } 

前面if块之外。但在做同样的事情的一个简单的方法是,如果块完全删除这一点,并改变

return level; 

return level2; 
+0

'无功行= rowset.getChildren(“行”); var level = 0; (var i = 0; i 10anat120