将XML解析为INT来求和数字



我有一个XML,我正试图从中求和。这个数字要么是0,要么是1,我想得到所有数字的和。XML如下所示:

<alerts>
<alert1>0</alert1>
<alert2>1</alert2>
<alert3>1</alert3>
<alert4>0</alert4>
</alerts>

我当前的代码(错误(如下:

xpath = require('xpath');
xmldom = require('xmldom');
doc = new xmldom.DOMParser().parseFromString("sourceXml");
var count = xpath.select("alerts/alert1", doc).toString();
count += xpath.select("alerts/alert2", doc).toString();
count += xpath.select("alerts/alert3", doc).toString();
count += xpath.select("alerts/alert4", doc).toString();

var result = count;

显然,由于它们是字符串;0110";作为字符串而不是";2〃;作为INT。我尝试在parseInt中包装每个,但只返回NaN。如有任何帮助,我们将不胜感激。

编辑:

parseInt(xpath.select("alerts/alert3", doc).toString());
parseInt(xpath.select("alerts/alert3", doc)); 

两者都试过了,但我对JavaScript不是很有经验,所以这可能是一个语法问题。

xpath.select()文档。。。

返回值是根据表达式的结果类型确定的(总是可以根据表达式的语法提前预测(:

  • 如果表达式的计算结果为布尔值,则为布尔值
  • 如果表达式的计算结果为数值,则为数字
  • 如果表达式的计算结果为字符串,则为字符串
  • 如果表达式的计算结果为节点集:
    • 如果single未指定或错误,则为0个或多个节点的数组
    • 单个节点(文档顺序中的第一个节点(或undefined(如果single是真的(

所有结果都是数组,每个结果都包含一个节点。

实际上,您可以使用XPath数字函数自动强制值为数字

const count = xpath.select("number(alerts/alert1)", doc)
+ xpath.select("number(alerts/alert2)", doc)
+ xpath.select("number(alerts/alert3)", doc)
+ xpath.select("number(alerts/alert4)", doc)

也许一个更简单的选择是简单地使用XPath求和函数

const count = xpath.select(
"sum(alerts/*[self::alert1 or self::alert2 or self::alert3 or self::alert4])",
doc
)

另请参阅XPath以选择多个标签

这个有什么问题:

const count = xpath.select("sum(alerts/*)", doc) 

最新更新