像SQL“IN”这样的XPATH有什么用吗?

时间:2011-02-16 20:35:30

标签: xslt xpath

可能有更好的方法可以做到这一点,如果有请分享。我有一个id列表,我想用它来选择某些元素。例如,假设我有以下XML

<ANSWER calculatedValue="8917.51" 
        type="DECIMAL" 
        desc="Additional Features"  
        id="ADDTL" />
<ANSWER calculatedValue="1997.16" 
        type="DECIMAL" 
        desc="Appliances"
        id="APP" />
<ANSWER calculatedValue="6988.94" 
        type="DECIMAL" 
        desc="Electrical"
        id="ELE" />
<ANSWER calculatedValue="21184.22" 
        type="DECIMAL" 
        desc="Exterior Finish"
        id="EXT" />

我想得到计算值的总和,其中ID是ADDTL,APP和ELE。我能做到这一点:

sum(ANSWER[@id = 'ADDTL' or @id = 'APP' or @id = 'ELE']/@calculatedValue)

有没有办法做这样的事情:

sum(ANSWER[@id in ('ADDTL,APP,ELE')]/@calculatedValue)

在实际使用中,此列表大约为15个ID。我可能会使用tokenize和index-来做这个,但我想知道是否有像XPATH的SQL“IN”之类的东西。思想,想法。如果情况变得更糟,我会使用“或”。

2 个答案:

答案 0 :(得分:3)

几乎。使用此XPath 1.0表达式:

sum(
  ANSWER[
    contains(
      ',ADDTL,APP,ELE,',
      concat(
        ',',
        @id,
        ','
      )
    )
  ]/@calculatedValue
)

或者这个XPath 2.0表达式:

sum(ANSWER[@id = ('ADDTL','APP','ELE')]/@calculatedValue)

答案 1 :(得分:0)