2016-04-21 8 views
2

Ich habe eine XML-Datei bekommt, die diese Daten enthält:HTML-Tabelle Ausgabe

<?xml version="1.0" encoding="iso-8859-1" ?> 
    <university> 
    <lecture> 
     <class>English</class> 
     <hours>3</hours> 
     <pupils>30</pupils> 
    </lecture> 
    <lecture> 
     <class>Math</class> 
     <hours>4</hours> 
     <pupils>27</pupils 
    </lecture> 
    <lecture> 
     <class>Science</class> 
     <hours>2</hours> 
     <pupils>25</pupils> 
    </lecture> 
    </university> 

Ist es möglich, wenn ich einen XQuery-Code erhalten kann, die diesen Ausgang (unten) für mich produziert?

<table> 
<tr> 
    <td>English class runs for 3 with 30 pupils</td> 
    <td>Math class runs for 4 with 26 pupils</td> 
    <td>Science class runs for 2 with 25 pupils</td> 
</tr> 
</table> 

EDIT: Unten ist mein Versuch:

let $classroom := doc("uni.xml")/university/lecture/class 
let $hr := doc("uni.xml")/university/lecture/hours 
let $pupl := doc("uni.xml")/university/lecture/pupils 

<tr> 
<table> 

for $a in $classroom, 
$b in $hr, 
$c in $pupl 

return <td>{$a} class runs for {$b} with {$c} pupils</td> 

</tr> 
</table> 

Ich erhalte eine Fehlermeldung sagen, ich brauche einen Wert zurückgeben, die ich schon getan. Wenn ich die tr- und table-Tags heraushole, funktioniert es, aber es gibt mir ein Endlosschleife-Ergebnis.

+0

Wie angekündigt, ist Ihre XML-Eingabe nicht wohlgeformt. XML benötigt ein einzelnes Wurzelelement. Hast du auch schon etwas versucht? Bitte teilen Sie – har07

+0

@ har07: Ich habe es versucht (siehe meine Bearbeitung), aber es funktioniert nicht. – mrteeth

Antwort

1

Als Reaktion auf die aktualisierte XML, und ein wenig von Ihrem versuchen XQuery-Stil, die Verwendung von Variablen, würde ich so etwas wie dies vorschlägt:

<table> 
<tr> 
{ 
    for $lecture in doc("uni.xml")/university/lecture 
    let $class := $lecture/class/string() 
    let $hours := $lecture/hours/string() 
    let $pupils := $lecture/pupils/string() 
    return 
     <td>{$class} class runs for {$hours} with {$pupils} pupils</td> 
} 
</tr> 
</table> 

Demo: http://www.xpathtester.com/xquery/33e31b342098712e331285bda3010e0c

Grundsätzlich ist die Abfrage Schleife durch gemeinsame Elternelemente, die alle benötigten Informationen enthalten; die lecture Elemente. Verwenden Sie dann einfaches relatives XPath/XQuery, um Daten aus jedem lecture zu extrahieren, um die erforderliche Ausgabe zu erzeugen.

+0

Danke. Ich habe meinen Beitrag oben mit den Korrekturen zum XML und meinem versuchten Code aktualisiert. Lass mich wissen, was du über den Code denkst. – mrteeth

+0

@mrteeth Meine Antwort entsprechend aktualisiert. Ich schätze Ihren Versuch ehrlich, aber ich denke, dass es nicht in der richtigen Richtung ist (ich meine das "für" -Konstrukt), also schlug oben ein etwas anderer Ansatz vor, um die Aufgabe zu erfüllen. – har07

+0

Cool, danke für die Korrektur. Es läuft gut. Ich habe mich gefragt, warum hast du dich in die for-Schleife gesetzt? Soll es effizienter sein? – mrteeth