Unterschiedliche Elemente und gruppieren
Gegeben, das folgende xml-fragment:
<Problems>
<Problem>
<File>file1</File>
<Description>desc1</Description>
</Problem>
<Problem>
<File>file1</File>
<Description>desc2</Description>
</Problem>
<Problem>
<File>file2</File>
<Description>desc1</Description>
</Problem>
</Problems>
Ich brauche, um etwas zu produzieren, wie
<html>
<body>
<h1>file1</h1>
<p>des1</p>
<p>desc2</p>
<h1>file2</h1>
<p>des1</p>
</body>
</html>
Versuchte ich mit einem Schlüssel, wie
<xsl:key name="files" match="Problem" use="File"/>
aber ich weiß nicht wirklich verstehen, wie man es an den nächsten Schritt, oder wenn dann ist das auch der richtige Ansatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es tun würde, mit dem Muenchean Methode. Google 'xslt muenchean' für mehr info von INTELLIGENTEREN Menschen. Es könnte ein cleverer Weg, aber ich werde verlassen, dass andere.
Einen Hinweis, ich vermeiden Sie Versalien am Anfang der xml-element-Namen, z.B. 'Datei', aber das ist bis zu Ihnen.
Die Idee ist, Taste jede Datei, element mit text-Wert. Dann nur die Datei anzuzeigen Werte, wenn Sie das gleiche element wie die Form-man. Um zu überprüfen, ob Sie identisch sind, verwenden Sie generate-id. Es ist ein ähnlicher Ansatz, bei dem Sie vergleichen das erste element entspricht. Ich kann Ihnen nicht sagen, welches die effizientere ist.
Getestet hab ich den code hier mit Marrowsoft Xselerator, meine Lieblings-xslt-tool, obwohl es nicht mehr verfügbar, soweit ich weiß. Das Ergebnis bekam ich ist:
Dies ist mit msxml4.
Habe ich sortiert die Ausgabe nach der Datei. Ich bin mir nicht sicher, ob Sie wollte, dass.
Ich hoffe, das hilft.
Diese Lösung ist etwas einfacher, effizienter und gleichzeitig mehr Allgemeine als der eine vorgestellt, die von Richard:
Diese transformation:
, wenn angewandt, um die bereitgestellten XML-Dokument:
Produziert das erwartete Ergebnis:
Tun, beachten Sie die simple-match Muster des ersten
<xsl:key>
und wie, mit Hilfe eines zweiten<xsl:key>
wir suchen Sie alle "Description
"- Elemente sind Geschwister von einem "File
" - element mit einem vorgegebenen Wert.Wir hätte mehr Vorlagen statt
<xsl:for-each - >
pull-Verarbeitung, aber das ist eine ganz einfache Fall und die Lösung, die wirklich profitiert von kürzeren, kompakteren und lesbareren code.Beachten Sie auch, dass in XSLT 2.0 wird man in der Regel das
<xsl:for-each-group>
Unterricht statt der Muenchian Methode.Diese XSLT 1.0 Lösung wird auch den trick tun. Etwas kürzer als die anderen Lösungen!
Ergebnis: