Есть ли что-нибудь для XPATH, как SQL "IN"? - PullRequest
1 голос
/ 16 февраля 2011

Там может быть лучший способ сделать это, и если есть, пожалуйста, поделитесь. У меня есть список идентификаторов, которые я хотел бы использовать для выбора определенных элементов. Например, допустим, у меня есть следующий 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" />

Я хочу получить сумму рассчитанных значений, где идентификаторы ADDTL, APP и ELE. Я мог бы сделать это:

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

Есть ли способ сделать что-то вроде этого:

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

При фактическом использовании этот список будет составлять около 15 идентификаторов. Я мог бы, вероятно, использовать tokenize и index-of для этого, но мне было интересно, есть ли что-то вроде SQL «IN» для XPATH. Мысли, идеи. Если хуже становится хуже, я просто использую "или".

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Почти.Используйте это выражение XPath 1.0:

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

Или это выражение XPath 2.0:

sum(ANSWER[@id = ('ADDTL','APP','ELE')]/@calculatedValue)
0 голосов
/ 17 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...