我有一个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)