2016-05-18 5 views
1

Ich habe Probleme beim Entwerfen einer Xquery. Meine XML sieht aus wie ein Pokemon Datenbank:Beratung Elemente in Elementen mit xquery

<species id="a0001"> 
     <name></name> 
     <description></description> 
     <type></type> 
     <type></type> (can have different types) 
     <type></type> 
     <attack> 
      <has-attack id="p01"/> 
      <has-attack id="p02"/> 
     </attack> 
     <evolution> 
      <species id="a0002"> 
       . 
       . 
       . 
       <evolution> 
        <species id="a0003"> 
             . 
             . 
             . 
        </species> 
       </evolution> 
      </species> 
      <species id="a0004"> 
       . 
       . 
       . 
      </species> 
     </evolution> 
</species> 

Was Im versuchen zu tun, ist es, alle Arten mit dem Typ „Fire“ zu bekommen.

declare variable $tipo as xs:string := "Fire"; 

for $b in doc(".xml")/bd/species 
let $nattacks:= count ($b/attacks) 
    where $b/type= $type 
return <result> 
     {$b/@id} 
     {$b/name} 
     <na>{$nattacks}</na> 
     </result> 

Aber ich weiß nicht, wie in der „Evolutions“ -Label auf die Art zuzugreifen, jede Hilfe?

+0

es nur sein, zeigt mir die erste Spezies id = A0001 – aldonair92

+2

Sie können '// species' alle finden' species' Elemente in der gesamten XML : 'doc (". xml ") // Spezies. Was ist das Problem damit? – har07

+0

Danke, ich wusste nicht, dass Sie // verwenden können, um alle Elemente im Dokument zu finden. – aldonair92

Antwort

2

@ har7 ist richtig, aber es könnte viel aufgeräumter

declare variable $local:tipo as xs:string := "Fire"; 

for $b in doc(".xml")//species[type = $local:tipo] 
return <result> 
    {$b/@id} 
    {$b/name} 
    <na>{count($b/attacks)}</na> 
    </result> 
+0

danke, es sieht wirklich viel aufgeräumter aus. – aldonair92

+0

Wie wäre es, wenn ich eine Spezies mit ihrer Evolution in einen HTML-Körper zurückgeben möchte? Ich finde nicht den richtigen Weg, um die Ausgabe zu bekommen – aldonair92

Verwandte Themen