Eindeutige Elemente und Gruppierung

8

Gegeben das folgende xml-Fragment:

%Vor%

Ich muss etwas wie

produzieren %Vor%

Ich habe versucht, einen Schlüssel wie

zu verwenden %Vor%

aber ich verstehe nicht wirklich, wie ich es zum nächsten Schritt bringen soll, oder ob das sogar der richtige Ansatz ist.

    
rjohnston 30.12.2008, 00:23
quelle

3 Antworten

5

So würde ich es machen, indem ich die münchnerische Methode verwende. Google "xslt muenchean" für mehr Informationen von klügeren Menschen. Es könnte einen schlauen Weg geben, aber ich überlasse das anderen.

Eine Anmerkung, ich vermeide die Verwendung von Großbuchstaben am Anfang von XML-Elementnamen, z. B. "Datei", aber das liegt bei Ihnen.

%Vor%

Die Idee ist, jedes Dateielement mit seinem Textwert einzugeben. Zeigen Sie dann die Dateiwerte nur an, wenn sie das gleiche Element wie das Schlüsselelement sind. Um zu überprüfen, ob sie identisch sind, verwenden Sie generate-id. Es gibt einen ähnlichen Ansatz, bei dem Sie das erste übereinstimmende Element vergleichen. Ich kann Ihnen nicht sagen, was effizienter ist.

Ich habe den Code hier mit Marrowsoft Xselerator getestet, meinem liebsten xslt-Tool, obwohl nicht mehr verfügbar, afaik. Das Ergebnis ist:

%Vor%

Dies verwendet msxml4.

Ich habe die Ausgabe nach Datei sortiert. Ich bin mir nicht sicher, ob du das wolltest.

Ich hoffe, das hilft.

    
Richard A 30.12.2008, 01:12
quelle
7

Diese Lösung ist ein bisschen einfacher, effizienter und gleichzeitig allgemeiner als die von Richard vorgestellte:

Diese Umwandlung :

%Vor%

bei Anwendung auf das bereitgestellte XML-Dokument :

%Vor%

Erzeugt das gewünschte Ergebnis :

%Vor%

Beachten Sie das einfache Übereinstimmungsmuster der ersten <xsl:key> und wie wir mit einem zweiten <xsl:key> alle " Description " Elemente finden, die Geschwister eines " File " Elements sind, das einen bestimmten Wert hat.

Wir hätten mehr Vorlagen anstelle von <xsl:for-each> verwenden können -Verarbeitung, dies ist jedoch ein recht einfacher Fall und die Lösung profitiert wirklich von kürzerem, kompakterem und besser lesbarem Code.

Beachten Sie auch, dass in XSLT 2.0 normalerweise <xsl:for-each-group> Anweisung anstelle der Münchische Methode .

    
Dimitre Novatchev 30.12.2008 06:45
quelle
0

Diese XSLT 1.0 Lösung wird auch den Zweck erfüllen. Etwas prägnanter als die anderen Lösungen!

%Vor%

Ergebnis:

%Vor%     
Nick Grealy 19.09.2013 04:41
quelle

Tags und Links