Google 文档和 xml 阅读
Google Docs and xml reading
我有工作代码(下面)来阅读 google 文档中的 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 值和我的代码 returns 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"/>
代码仍然是 returns 1. 我需要的是从两行中添加这些值,以便代码 returns 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)
。您正在那里进行分配,显然您打算在那里测试平等性。赋值导致循环条件为假,因此循环提前终止。
因此您可以将 if
条件更改为 if (i == rows.length)
。但是,该测试永远不会为真,因为循环条件包括 && i<rows.length
。也许你想说 if (i == rows.length - 1)
,这样 if
的主体将在循环的最后一次执行?但只有当 last row
满足
时才会发生
(typeIdAttr && typeIdAttr.getValue()==id && row.getAttribute("orderState").getValue()==0)
我认为这不是您想要的。
我真的希望你的意思是移动
if (i == rows.length - 1) {
level = level2;
}
在前面 if
的块之外。但是做同样事情的一个更简单的方法是完全删除这个 if 块,然后更改
return level;
到
return level2;
我有工作代码(下面)来阅读 google 文档中的 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 值和我的代码 returns 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"/>
代码仍然是 returns 1. 我需要的是从两行中添加这些值,以便代码 returns 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)
。您正在那里进行分配,显然您打算在那里测试平等性。赋值导致循环条件为假,因此循环提前终止。
因此您可以将 if
条件更改为 if (i == rows.length)
。但是,该测试永远不会为真,因为循环条件包括 && i<rows.length
。也许你想说 if (i == rows.length - 1)
,这样 if
的主体将在循环的最后一次执行?但只有当 last row
满足
(typeIdAttr && typeIdAttr.getValue()==id && row.getAttribute("orderState").getValue()==0)
我认为这不是您想要的。
我真的希望你的意思是移动
if (i == rows.length - 1) {
level = level2;
}
在前面 if
的块之外。但是做同样事情的一个更简单的方法是完全删除这个 if 块,然后更改
return level;
到
return level2;