Xml 如何在XPath中使用sum函数?

Xml 如何在XPath中使用sum函数?,xml,xpath,Xml,Xpath,我有一个包含以下内容的xml文件: <Xavor> <Dev> <Emp>1</Emp> <Floor>1</Floor> <Salary>1200.4</Salary> </Dev> <Dev> <Emp>2</Emp> <Salary>3100.8</Salary> </Dev&g

我有一个包含以下内容的xml文件:

<Xavor>
<Dev>
    <Emp>1</Emp>
    <Floor>1</Floor>
    <Salary>1200.4</Salary>
</Dev>
<Dev>
    <Emp>2</Emp>
    <Salary>3100.8</Salary>
</Dev>
<Dev>
    <Emp>3</Emp>
    <Floor>1</Floor>
</Dev>
但这只返回第二个薪资值,即
3100.8
!!! 当工资中只有非浮点数时,这个XPath工作得很好。请帮帮我。

试试这个:

sum(/Xavor/Dev[position() &lt;= 2]/Salary/text())

除了@Rubens Farias给出的正确答案外,如果您想对所有指定了(数字)薪水的
Dev
的薪水求和,请使用:

sum(/*/Dev/Salary[number(.) = number(.)])

您确实需要将前两个元素相加,或者将所有元素与
Salary
信息相加?如果您在Altova XMLSpy中测试XPath表达式,则不需要将标记更改为字符引用。当然,如果您是在XSLT或Stylevision或其他任何形式中执行此操作,那么这是必要的。此外,员工是否总是井然有序,或者您是否需要按
Emp
元素进行订购?我已经这样尝试过了,并取得了成功:
sum(/*/Dev[Emp G_H感谢您的详细回复。很抱歉,我是XPath初学者,所以现在我很难理解这个新的XPath。它正在使用正确的输出。谢谢:)如果您认为此XPath是按照您之前的要求执行的,那么您就错了。它显然只选择了第二个Dev元素,而不是前两个。它工作正常,但只使用非浮点数。+1-我更喜欢这种方法,而不是我通常使用的“NaN”方法。(
sum(/*/Dev/Salary[string(number)()!=“NaN”)
)@dimitre:你能给我解释一下(或指出一些url)这个[number(.)=number(.)]是如何工作的吗?如果找到一个与之匹配的NaN,我希望是这样。Thanks@dimitre当前位置我想我明白了。NaN=NaN从来都不是真的,因此number()=number()当节点可转换为数字时工作。@LuisFilipe,确切地说。根据定义,NaN不等于任何其他值,包括NaN
sum(/*/Dev/Salary[number(.) = number(.)])