我有xml。我使用以下XPath表达式:
sum(//Item[@type='sg_aml_rel'][(./sg_percentage * ./related_id/Item[@type='sg_aml2']/sg_cost)])
我已经创建了XMLDoucment和Load XML对象,然后创建了XPathNavigator对象,并提供了xpth来评估XPathNavigator的方法。 我的XML看起来像:
<AML>
<Item>
<sg_percentage>10</sg_percentage>
<related_id>
<Item>
<sg_cost>100<sg_cost>
</Item>
<related_id>
</Item>
<Item>
<sg_percentage>20</sg_percentage>
<related_id>
<Item>
<sg_cost>500<sg_cost>
</Item>
<related_id>
</Item>
<AML>
我想要SUM(sg_percentage * sg_cost)。
答案 0 :(得分:0)
decimal sum = 0;
foreach (XPathNavigator item in document.CreateNavigator().Select("/AML/Item"))
{
sum += Convert.ToDecimal(item.Evaluate("sg_percentage * related_id/Item/sg_cost"));
}
完成此操作后,sum
应该具有您正在寻找的值。
将这一点泛化的一种方法是定义一个这样的方法:
public static decimal SumPaths(XmlNode source, string nodePath, string formula)
{
decimal sum = 0;
foreach (XPathNavigator item in source.CreateNavigator().Select(nodePath))
{
sum += Convert.ToDecimal(item.Evaluate(formula));
}
return sum;
}
然后你可以这样称呼它:
decimal sum =
SumPaths(document, "/AML/Item", "sg_percentage * related_id/Item/sg_cost");