пример Xquery с оператором "И", пожалуйста - PullRequest
2 голосов
/ 11 августа 2010

Я думаю, что Xquery не имеет оператора "И", и я не могу сделать это:

если node1 = xxx и node2 = yyy и node3 = zzz , тогда замените node3 на www

Ответы [ 2 ]

6 голосов
/ 11 августа 2010

XQuery имеет оператор And, который является "и".также есть оператор ИЛИ "или".

let $d := <Employee>
<Name>Test</Name>
<ID>1909239</ID>
<Address>test Add </Address>
<Email>test@test.net</Email>
<Department>Dept 1</Department>
<Department>Dept 2</Department>
<Department>Dept 3</Department>
<Department>Dept 4</Department>
<Department>Dept 5</Department>

return if( ($d//*:Department[1]/text() = 'Dept 1') and ($d//*:Department[1]/text() = 'Dept 2') ) then fn:true() else fn:false()
0 голосов
/ 11 августа 2010

http://x -query.com / pipermail / Обсуждение / 2004-ноябрь / 000358.html

<< В XQuery нет такого оператора, как <code>"&=". Я думаю, что вам нужно Взамен содержит функцию (), хотя вам может потребоваться match ().

Так что я думаю, что ваш запрос должен выглядеть так:

let $query :=
  if ($ttl != "") then (
    for $entries in collection($collctn)//TEI.2
                      [contains(., $kwds) and
                       descendant::head[contains(., $ttl)]
    return (
      if ($entries/@id = "ppp.00271") then (
        ...
      )
      else if ($entries/@id = "ppp.00237") then (
        ...
      )
      else if ($entries/@id = "ppp.00473") then (
        ...
      )
      else (
        ...
      )
  )
  else if (...) then (
    ...
  )
  else (
    ...
  )
...