Ich habe einige komplexe XSLT 2.0-Transformationen. Ich versuche herauszufinden, ob es einen allgemeinen Zweck gibt, um sicherzustellen, dass keine leeren Tags ausgegeben werden. Also ... konzeptionell, eine letzte Stufe der Verarbeitung, die alle leeren Tags rekursiv entfernt. Ich verstehe, dass dies durch ein separates XSLT getan werden könnte, das nur leere Tags ausfiltert, aber ich muss alles in einem einzigen Paket zusammenpacken.
Diese XSLT 2.0-Transformation veranschaulicht, wie eine Verarbeitung mit mehreren Durchläufen (in diesem Fall zwei Durchgänge) durchgeführt werden kann:
%Vor%bei Anwendung auf dieses XML-Dokument :
%Vor% Erzeugt ein Ergebnisdokument im ersten Durchlauf (das in der $vPass1
-Variable erfasst wird), in dem alle <num>
-Elemente mit dem Inhalt evenly integer von ihrem Inhalt abgezogen werden und leer sind. Dann werden in dem zweiten Durchlauf, der in einem spezifischen Modus angewendet wird, alle leeren Elemente entfernt.
Das Ergebnis der Transformation ist :
%Vor% Beachten Sie die Verwendung von Modi und die Sondermodi #all
und #current
.
Update: Das OP möchte nun in einem Kommentar "rekursiv" alle Knoten löschen, die keinen nicht-leeren Nachfolger haben.
Dies kann einfacher implementiert werden, ohne explizite Rekursion. Ändere einfach:
%Vor%zu:
%Vor%