Toon posts:

[XQuery] if-then-else

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een beetje aan het spelen met XQuery, gebruikmakend van XHive (http://support.x-hive.com/xquery/index.html, klik in de eerste paragraaf op "specify your own queries")

Daar heb ik nu de volgende query uitgevoerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<results>{
  let $doc := document("/XQuery/docs/xmach-1/directory.xml")
  for $h in $doc//host
    return
      <result>
        {
           if ($h/descendant::path[@name='bpath1'])
           then <host>{$h/@*}</host>
           else ()
        }
      </result>
}</results>


Deze query zorgt ervoor dat ik iedere host terugkrijg die als descendant het pad 'bpath1' heeft.

Hier gaat het echter niet om, het gaat me erom dat ik nu voor iedere host in de file een <result> element aanmaak, maar dit wil ik helemaal niet. Wat ik wil is gewoon alleen de <host> elementen die aan de conditie voldoen en verder helemaal niks. Het weghalen van <result> en </result> in de code levert echter een foutmelding.

Is er een manier om dit voor elkaar te krijgen?

Het resultaat zoals ik het nu krijg heeft de volgende vorm:
code:
1
2
3
4
5
6
7
8
<results>
  <result/>
  <result/>
  <result>
    <host name="ahost1"/>
  </result>
  <result/>
</results>


Dit wil ik graag in deze vorm hebben (dus zonder de lege <result> elementen):
code:
1
2
3
<results>
  <host name="ahost1"/>
</results>

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Je moet niet alleen <result> en </result> weg laten, maar ook de accolades:
code:
1
2
3
4
5
6
7
8
<results>{
  let $doc := document("/XQuery/docs/xmach-1/directory.xml")
  for $h in $doc//host
    return
      if ($h/descendant::path[@name='bpath1'])
      then <host>{$h/@*}</host>
      else ()
}</results>

Accolades gebruik je om weer terug naar xquery te gaan binnen een stuk xml.
offtopic:
ook met xml&databases bezig? :P

Verwijderd

Topicstarter
Arg, beetje heel erg dom van mij :D

Maar ik ben inderdaad ook met XML & Databases bezig :+, nu nog even fiksen dat deze query ook gaat doen wat nu echt gevraagd wordt :)