谷歌文档和xml阅读

Google Docs and xml reading

本文关键字:阅读 xml 文档 谷歌      更新时间:2023-09-26

我有工作代码(下面)来读取谷歌文档中的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"/>

我想要的是 volT剩余值,我的代码返回 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;
}

一个问题是if (i = rows.length) 。你正在那里做一个作业,你显然打算测试平等性。赋值会导致循环条件为 false,因此循环提前终止。

因此,您可以将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;