Lohnt sich XSLT? [geschlossen]


112

Vor einiger Zeit habe ich mit einem Projekt begonnen, in dem ich ein HTML-ähnliches XML-Schema entworfen habe, damit Autoren ihre Inhalte (Lehrmaterial) in einem vereinfachten Format schreiben können, das dann über XSLT in HTML umgewandelt wird. Ich habe eine Weile damit herumgespielt (gekämpft) und es auf ein sehr einfaches Niveau gebracht, war dann aber zu verärgert über die Einschränkungen, auf die ich stieß (was möglicherweise Einschränkungen meines Wissens waren) und als ich einen Blog las, in dem ich vorschlug, einen Graben zu ziehen XSLT und schreiben Sie einfach Ihren eigenen XML-zu-was auch immer-Parser in der Sprache Ihrer Wahl, ich bin eifrig darauf gesprungen und es hat hervorragend geklappt.

Ich arbeite noch bis heute daran ( ich sollte eigentlich gerade daran arbeiten, anstatt auf SO zu spielen ), und ich sehe immer mehr Dinge, die mich denken lassen, dass die Entscheidung, XSLT fallen zu lassen, war ein guter.

Ich weiß, dass XSLT seinen Platz hat, da es ein akzeptierter Standard ist und dass, wenn jeder seine eigenen Dolmetscher schreibt, 90% von ihnen auf TheDailyWTF landen werden . Angesichts der Tatsache, dass es sich um eine funktionale Stilsprache handelt und nicht um den prozeduralen Stil, mit dem die meisten Programmierer vertraut sind, würden Sie jemandem, der sich auf ein Projekt wie das meine einlässt, empfehlen, den von mir eingeschlagenen Weg einzuschlagen oder ihn mit XSLT hervorzuheben ?


1
Ich denke, es gibt eine gravierende Trennung zwischen dem Thema Ihrer Frage (was argumentativ ist) und der tatsächlichen Frage, die Sie stellen (nämlich, ob SO-Leser tatsächlich XSLT verwenden oder empfehlen, es zu verwenden). Es ist auch unklar, warum diese Frage beantwortet werden muss.
Martin v. Löwis

3
@ Martin, was würdest du als Titel vorschlagen? Ich brauche diese Frage nicht zu beantworten, aber ich denke, sie ist interessant und auch nützlich für jemanden, der versucht zu entscheiden, ob er in XSLT oder eine Alternative investiert.
Benjol

7
Ich denke, XSLT hat das Produktivitätsplateau innerhalb des Hype-Zyklus erreicht ( en.wikipedia.org/wiki/Hype_cycle ).
Dirk Vollmar

Ich persönlich habe das Gefühl, dass mein XML keinen Wert hinzufügt, bis ich mindestens 1 oder 2 Transformationen durchlaufen habe.

@ Martinv.Löwis, stimme deiner Einschätzung zu. Auch dies hängt wirklich mit den Bedenken des Unternehmens zusammen, was bedeutet, dass derselbe Typ alles tut und die Methode in Betrieb genommen wird. Gut, erledigen Sie den schnellsten Implementierungsstil. In diesem Fall schrauben Sie sich sowieso nur. XSLT ist ziemlich schwierig, bis es klickt, domänenspezifisches Wissen erfordert, aber in einer großen Organisation ... O mein Gott, Sie erkennen, wie falsch alle Anti-XML-Leute sind. Und wenn Sie XSLT kennen, ist dies die beste Wahl. Es scheint nur dann anders zu sein, wenn Sie XSLT nicht kennen, sodass Sie die Lerninvestition berücksichtigen.
JM Becker

Antworten:


64

Vorteile von XSLT:

  • Domänenspezifisch für XML, sodass beispielsweise in der Ausgabe kein wörtliches XML angegeben werden muss.
  • Unterstützt XPath / XQuery, das eine gute Möglichkeit zum Abfragen von DOMs sein kann, genauso wie reguläre Ausdrücke eine gute Möglichkeit zum Abfragen von Zeichenfolgen sein können.
  • Funktionale Sprache.

Nachteile von XSLT:

  • Kann obszön ausführlich sein - Sie müssen kein wörtliches XML zitieren, was effektiv bedeutet, dass Sie Code zitieren müssen. Und nicht auf hübsche Weise. Aber andererseits ist es nicht viel schlimmer als ein typischer SSI.
  • Macht bestimmte Dinge nicht, die die meisten Programmierer für selbstverständlich halten. Zum Beispiel kann die Manipulation von Strings eine lästige Pflicht sein. Dies kann zu "unglücklichen Momenten" führen, in denen Anfänger Code entwerfen und dann verzweifelt im Web nach Hinweisen suchen, wie Funktionen implementiert werden können, von denen sie angenommen haben, dass sie nur vorhanden sind und sich keine Zeit zum Schreiben geben.
  • Funktionale Sprache.

Eine Möglichkeit, prozedurales Verhalten zu erhalten, besteht übrigens darin, mehrere Transformationen miteinander zu verketten. Nach jedem Schritt müssen Sie ein brandneues DOM bearbeiten, das die Änderungen in diesem Schritt widerspiegelt. Einige XSL-Prozessoren haben Erweiterungen, um dies effektiv in einer Transformation durchzuführen, aber ich vergesse die Details.

Wenn Ihr Code also hauptsächlich ausgegeben wird und nicht viel Logik enthält, kann XSLT eine sehr gute Möglichkeit sein, ihn auszudrücken. Wenn es viel Logik gibt, aber hauptsächlich Formulare, die in XSLT integriert sind (wählen Sie alle Elemente aus, die wie bla aussehen, und für jedes ausgegebene bla), ist es wahrscheinlich eine recht freundliche Umgebung. Wenn Sie immer an XML denken möchten, probieren Sie XSLT 2 aus.

Andernfalls würde ich sagen, dass die Verwendung von XSLT nur wenige Vorteile bietet, wenn Ihre bevorzugte Programmiersprache eine gute DOM-Implementierung hat, die XPath unterstützt und es Ihnen ermöglicht, Dokumente auf nützliche Weise zu erstellen. Bindungen an libxml2 und gdome2 sollten gut funktionieren, und es ist keine Schande, sich an Allzwecksprachen zu halten, die Sie gut kennen.

Eigenentwickelte XML-Parser sind normalerweise entweder unvollständig (in diesem Fall bleiben Sie eines Tages hängen) oder nicht viel kleiner als etwas, das Sie von der Stange hätten haben können (in diesem Fall verschwenden Sie wahrscheinlich Ihre Zeit) und geben Sie haben eine beliebige Anzahl von Möglichkeiten, schwerwiegende Sicherheitsprobleme im Zusammenhang mit böswilligen Eingaben einzuführen. Schreiben Sie keine, es sei denn, Sie wissen genau, was Sie dadurch gewinnen. Das heißt nicht, dass Sie keinen Parser für etwas Einfacheres als XML als Eingabeformat schreiben können, wenn Sie nicht alles benötigen, was XML bietet.


3
XSLT ist nicht funktionsfähig, sondern deklarativ (wie SQL).
jmah

Eine XSL-Vorlage scheint mir alle Kriterien einer reinen Funktion zu haben. Was disqualifiziert sie davon, als funktional beschrieben zu werden? Warum ist "deklarativ" eine Alternative? a = 1; ist deklarativ.
AnthonyWJones


8
Ich glaube, funktionale Programmierung ist eine Art deklarative Programmierung.
Zifre

1
Obwohl der Punkt über XSLT 2.0 gut ist, gibt es zum Zeitpunkt des Schreibens keine weit verbreitete Unterstützung für XSLT 2.0.
PeterAllenWebb

90

So viel Negativität!

Ich benutze XSLT seit einigen Jahren und liebe es wirklich. Das Wichtigste, was Sie wissen müssen, ist, dass es sich nicht um eine Programmiersprache, sondern um eine Vorlagensprache handelt (und in dieser Hinsicht finde ich es asp.net / spit unbeschreiblich überlegen).

XML ist heute das De-facto-Datenformat der Webentwicklung, sei es Konfigurationsdateien, Rohdaten oder Speicherdarstellung. XSLT und XPath bieten Ihnen eine enorme leistungsstarke und sehr effiziente Möglichkeit, diese Daten in ein beliebiges Ausgabeformat umzuwandeln, und geben Ihnen sofort den MVC-Aspekt, die Präsentation von den Daten zu trennen.

Dann gibt es noch die nützlichen Funktionen: Namespaces auswaschen, unterschiedliche Schemadefinitionen erkennen, Dokumente zusammenführen.

Es muss besser sein, mit XSLT umzugehen, als eigene Methoden zu entwickeln. Zumindest ist XSLT ein Standard und etwas, für das Sie einstellen könnten, und wenn es jemals wirklich ein Problem für Ihr Team ist, können Sie den größten Teil Ihres Teams naturgemäß nur mit XML arbeiten lassen.

Ein realer Anwendungsfall: Ich habe gerade eine App geschrieben, die speicherinterne XML-Dokumente im gesamten System verarbeitet und auf Wunsch des Endbenutzers in JSON, HTML oder XML umwandelt. Ich hatte eine ziemlich zufällige Anfrage, als Excel-Daten bereitzustellen. Ein ehemaliger Kollege hatte etwas Ähnliches programmatisch gemacht, aber es erforderte ein Modul mit einigen Klassendateien und dass auf dem Server MS Office installiert war! Es stellt sich heraus, dass Excel über eine XSD verfügt: Neue Funktionalität mit minimaler Auswirkung auf den Basecode in 3 Stunden.

Persönlich denke ich, dass es eines der saubersten Dinge ist, denen ich in meiner Karriere begegnet bin, und ich glaube, dass alle offensichtlichen Probleme (Debugging, String-Manipulation, Programmierstrukturen) auf ein fehlerhaftes Verständnis des Tools zurückzuführen sind.

Offensichtlich glaube ich fest daran, dass es "es wert" ist.


8
Eine kleine Ergänzung zu Ihrem Punkt über das Debuggen. Mit den neuesten Versionen von Visual Studio können Sie direkt in XSL-Dateien debuggen. Haltepunkte setzen, inspizieren usw.
Craig Bovis

Dies ist eine so gute Antwort, besonders die erfrischende Geschichte des Excel XSD!
Laguna

1
@annakata, können Sie einen Link zu einem MSDN-Artikel oder einem Tutorial zur Excel-Funktion bereitstellen? Ich denke, das könnte etwas sein, das ich auch für mein Projekt verwenden kann. Vielen Dank!
Laguna

6
JSON und JAML überlegen sind Datenformate als XML. XML ist im Kern die Auszeichnungssprache . und es ist sehr bedauerlich, dass es für die strukturierte Datendarstellung so häufig missbraucht wurde.
Ulidtko

3
@ulidtko, Als Systemingenieur habe ich viele sehr unangemessene JSON als Markup gesehen ... Ich erwarte nur, dass noch mehr kommen, und XML sieht im Vergleich dazu fantastisch aus.
JM Becker

27

Ich muss hier eine Voreingenommenheit zugeben, weil ich XSLT für meinen Lebensunterhalt unterrichte. Es könnte sich jedoch lohnen, die Bereiche abzudecken, in denen meine Schüler arbeiten. Sie sind im Allgemeinen in drei Gruppen unterteilt: Verlagswesen, Bankwesen und Internet.

Viele der bisherigen Antworten lassen sich wie folgt zusammenfassen: "Es ist nicht gut für die Erstellung von Websites" oder "Es ist nichts wie Sprache X". Viele Techniker machen ihre Karriere ohne Kontakt zu funktionalen / deklarativen Sprachen. Wenn ich unterrichte, sind die erfahrenen Java / VB / C / etc-Leute diejenigen, die Probleme mit der Sprache haben (Variablen sind Variablen im Sinne von Algebra, zum Beispiel keine prozedurale Programmierung). Das sind viele der Leute, die hier antworten - ich bin noch nie mit Java klar gekommen, aber ich werde mich nicht darum kümmern, die Sprache deswegen zu kritisieren.

In vielen Fällen ist es ein unangemessenes Tool zum Erstellen von Websites - eine universelle Programmiersprache ist möglicherweise besser. Ich muss oft sehr große XML-Dokumente nehmen und sie im Web präsentieren. XSLT macht das trivial. Die Studenten, die ich in diesem Bereich sehe, neigen dazu, Datensätze zu verarbeiten und sie im Web zu präsentieren. XSLT ist sicherlich nicht das einzige anwendbare Werkzeug in diesem Bereich. Viele von ihnen verwenden jedoch das DOM, um dies zu tun, und XSLT ist sicherlich weniger schmerzhaft.

Die Bankstudenten, die ich sehe, verwenden im Allgemeinen eine DataPower-Box. Dies ist eine XML-Appliance, die zwischen Diensten verwendet wird, die verschiedene XML-Dialekte sprechen. Die Transformation von einer XML-Sprache in eine andere ist in XSLT fast trivial und die Anzahl der Studenten, die an meinen Kursen teilnehmen, nimmt zu.

Die letzten Studenten, die ich sehe, haben einen publizistischen Hintergrund (wie ich). Diese Leute neigen dazu, immense Dokumente in XML zu haben (glauben Sie mir, das Publizieren als Branche befasst sich sehr mit XML - das technische Publizieren gibt es schon seit Jahren und das Fachpublizieren ist jetzt da). Diese Dokumente müssen verarbeitet werden (DocBook to ePub fällt hier ein).

Jemand oben hat kommentiert, dass Skripte in der Regel unter 60 Zeilen liegen oder unhandlich werden. Wenn es unhandlich wird, hat der Codierer wahrscheinlich nicht wirklich die Idee - XSLT ist eine ganz andere Denkweise als viele andere Sprachen. Wenn Sie nicht die richtige Einstellung haben, wird es nicht funktionieren.

Es ist sicherlich keine aussterbende Sprache (die Menge an Arbeit, die ich bekomme, sagt mir das). Im Moment steckt es ein bisschen fest, bis Microsoft die (sehr späte) Implementierung von XSLT 2 abgeschlossen hat. Aber es ist immer noch da und scheint aus meiner Sicht stark zu sein.


Ich bin ein Java-Entwickler und ich liebe auch XML und XSLT. Ich wünschte, die Leute würden die Kraft dieser erkennen.
Nikolas

24

Wir verwenden XSLT ausgiebig für Dinge wie Dokumentation und machen einige komplexe Konfigurationseinstellungen benutzerfreundlich.

Für die Dokumentation verwenden wir viel DocBook, ein XML-basiertes Format. Auf diese Weise können wir unsere Dokumentation mit unserem gesamten Quellcode speichern und verwalten, da es sich bei den Dateien um einfachen Text handelt. Mit XSLT können wir problemlos unsere eigenen Dokumentationsformate erstellen, sodass wir den Inhalt sowohl generisch automatisch generieren als auch lesbarer machen können. Wenn wir beispielsweise Versionshinweise veröffentlichen, können wir XML erstellen, das ungefähr so ​​aussieht:

<ReleaseNotes>
    <FixedBugs>
        <Bug id="123" component="Admin">Error when clicking the Foo button</Bug>
        <Bug id="125" component="Core">Crash at startup when configuration is missing</Bug>
        <Bug id="127" component="Admin">Error when clicking the Bar button</Bug>
    </FixedBugs>
</ReleaseNotes>

Und dann, wenn wir XSLT verwenden (das oben Genannte in DocBook umwandelt), erhalten wir nette Versionshinweise (normalerweise PDF oder HTML), in denen Fehler-IDs automatisch mit unserem Fehler-Tracker verknüpft werden, Fehler nach Komponenten gruppiert werden und das Format von allem vollkommen konsistent ist . Und das obige XML kann automatisch generiert werden, indem unser Bug-Tracker nach Änderungen zwischen den Versionen abgefragt wird.

Der andere Ort, an dem wir XSLT als nützlich empfunden haben, ist tatsächlich unser Kernprodukt. Manchmal müssen wir bei der Schnittstelle mit Systemen von Drittanbietern Daten in einer komplexen HTML-Seite verarbeiten. Das Parsen von HTML ist hässlich, daher führen wir die Daten über TagSoup ein(wodurch ordnungsgemäße SAX-XML-Ereignisse generiert werden und wir im Wesentlichen mit HTML umgehen können, als wäre es ordnungsgemäß geschriebenes XML). Anschließend können wir XSLT dagegen ausführen, um die Daten in ein "bekanntes stabiles" Format umzuwandeln, mit dem wir tatsächlich arbeiten können . Wenn Sie diese Umwandlung in eine XSLT-Datei aufteilen, bedeutet dies, dass die Anwendung selbst nicht aktualisiert werden muss, wenn sich das HTML-Format ändert. Stattdessen kann der Endbenutzer die XSLT-Datei einfach selbst bearbeiten oder eine E-Mail senden ihnen eine aktualisierte XSLT-Datei, ohne dass das gesamte System aktualisiert werden muss.

Ich würde sagen, dass es für Webprojekte heute bessere Möglichkeiten gibt, mit der Ansichtsseite umzugehen als für XSLT, aber als Technologie gibt es definitiv Verwendungsmöglichkeiten für XSLT. Es ist nicht die am einfachsten zu verwendende Sprache der Welt, aber es ist definitiv nicht tot und hat aus meiner Sicht immer noch viele gute Verwendungsmöglichkeiten.


Danke, das ist eine schöne Antwort mit einem konkreten Beispiel.
Benjol

Und doch hatte jemand das Bedürfnis, es abzustimmen, ohne auch nur einen Kommentar zu hinterlassen, was mit meiner Antwort nicht stimmte
Adam Batkin,

Wahrscheinlich, weil sie nicht einverstanden waren ...
Benjol

Es gab ein anderes Programm ähnlich wie TagSoup, das ebenfalls einen richtigen XML-Baum aus HTML erstellt ... aber ich kann mich nicht an den Namen erinnern. Weiß es jemand?
Erjiang

Ordentlich ist ein schönes Programm für diesen Zweck
Erlock

19

XSLT ist ein Beispiel für eine deklarative Programmiersprache .

Andere Beispiele für deklarative Programmiersprachen sind reguläre Ausdrücke, Prolog und SQL. All dies ist sehr ausdrucksstark und kompakt und normalerweise sehr gut gestaltet und leistungsstark für die Aufgabe, für die sie entwickelt wurden.

Softwareentwickler hassen solche Sprachen jedoch im Allgemeinen, weil sie sich so stark von gängigen OO- oder prozeduralen Sprachen unterscheiden, dass sie schwer zu lernen und zu debuggen sind. Ihre kompakte Natur macht es im Allgemeinen sehr einfach, versehentlich viel Schaden anzurichten.

Während XSLT ein effizienter Mechanismus zum Zusammenführen von Daten in Präsentationen ist, schlägt dies in der benutzerfreundlichen Abteilung fehl. Ich glaube, deshalb hat es sich nicht wirklich durchgesetzt.


2
XSLT ist funktionsfähig, aber ich denke, es ist fraglich, ob es deklarativ ist (es gibt Ordnungsabhängigkeiten usw.). Ich stimme jedoch Ihrem Standpunkt zu, dass dies (ob funktional oder deklarativ) sowohl eine mächtige Sache als auch eine Quelle der Frustration für die meisten OO / prozeduralen Programmierer ist. Im Fall von XSLT glaube ich jedoch, dass es als funktionale Sprache zu viele Funktionen gibt, die die meisten funktionalen Sprachen nutzbar machen. Infolgedessen schreiben Sie in der Regel viel mehr Code als kompakt. Haben Sie beispielsweise versucht, Zeichenfolgen in XSLT (1.0) aufzuteilen?
Philsquared

3
XSLT ist übrigens nicht funktionsfähig - es hat keine Funktionen als erstklassige Werte. Ja, es gibt Hacks (FXSL), aber sie sind genau das, und Sie erhalten immer noch keine variable Erfassung mit ihnen (also keine Lambdas). XSLT ist rein (nebenwirkungsfrei), ja, aber das muss nicht "funktional" bedeuten.
Pavel Minaev

5
Ich bin mir nicht sicher, ob dies das ganze Bild ist. Die Regex-Syntax zum Beispiel ist sehr prägnant, während XSLT eine riesige Mischung aus extrem ausführlichen spitzen Klammern sowie Attributen und Elementen ist.
Jeff Atwood

22
@ Jeff Atwood: Wie bei Regex liegt die Schönheit von XSLT im Konzept, nicht in der Syntax. Für diejenigen, die sie nicht lesen können, sind Regexe eine riesige Mischung aus bedeutungslosen Buchstaben und Symbolen. Es ist die Denkweise hinter Regex, die sie schön macht.
Tomalak

6
@ Jeff Atwood Warum schreibst du so kategorische Aussagen über einen Bereich, den du offensichtlich nicht kennst? XSLT und XPath verfügen über gute RegEx-Funktionen, von denen einige zur Beantwortung von Fragen zu SO verwendet wurden. Ich habe mehr als einen Parser mit RegEx in XSLT für den Lexer geschrieben. Der komplizierteste Parser war für XPath 2.0. Schreiben ohne vorher zu lesen - wie im Chukche-Witz :)
Dimitre Novatchev

12

Ich erinnere mich an den ganzen Hype um XSLT, als der Standard neu veröffentlicht wurde. Die ganze Aufregung, eine komplette HTML-Benutzeroberfläche mit einer "einfachen" Transformation erstellen zu können.

Seien wir ehrlich, es ist schwer zu bedienen, nahezu unmöglich zu debuggen, oft unerträglich langsam. Das Endergebnis ist fast immer schrullig und weniger als ideal.

Ich werde eher an meinem eigenen Bein nagen als an einem XSLT, während es bessere Möglichkeiten gibt, Dinge zu tun. Trotzdem hat es seine Plätze, es ist gut für einfache Transformationsaufgaben.


1
unerträglich langsam? Verglichen mit was?
AnthonyWJones

Verglichen mit der Handschrift der Konvertierung in VB6 wie ich. Größenordnungen schneller als XSLT (Ich habe ADO Recordsets in HTML konvertiert - im Jahr 2002 oder so :-)
Endian

3
Das Debuggen mit Tools wie Oxygen ist viel einfacher als erwartet.
Andy Dent

3
+1. XSLT ist grundsätzlich völlig sinnlos. Es gibt nichts, was Sie damit machen können, was Sie mit einem Programm in einer echten Sprache nicht so einfach machen können.
Tom Anderson

10

Ich habe XSLT (und auch XQuery) ausgiebig für verschiedene Zwecke verwendet - um C ++ - Code als Teil des Erstellungsprozesses zu generieren, um Dokumentation aus Dokumentkommentaren zu erstellen und innerhalb einer Anwendung, die viel mit XML im Allgemeinen und XHTML im Besonderen arbeiten musste . Insbesondere der Codegenerator bestand aus mehr als 10.000 Zeilen XSLT 2.0-Code, die auf etwa ein Dutzend separate Dateien verteilt waren (er hat viele Dinge getan - Header für Clients, Remoting von Proxys / Stubs, COM-Wrapper, .NET-Wrapper, ORM - um nur zu nennen ein paar). Ich habe es über einen anderen Mann geerbt, der die Sprache nicht wirklich gut verstand, und die älteren Teile waren folglich ziemlich durcheinander. Neuere Sachen, die wir geschrieben haben, wurden jedoch größtenteils vernünftig und lesbar gehalten, und ich erinnere mich nicht an besondere Probleme damit. Es war sicherlich nicht schwieriger als für C ++.

Apropos Versionen: Der Umgang mit XSLT 2.0 hilft Ihnen definitiv dabei, gesund zu bleiben, aber 1.0 ist für einfachere Transformationen immer noch in Ordnung. In seiner Nische ist es ein äußerst praktisches Tool, und die Produktivität, die Sie durch bestimmte domänenspezifische Funktionen (vor allem dynamischer Versand über Vorlagenabgleich) erzielen, ist schwer zu erreichen. Trotz der wahrgenommenen Worthaftigkeit der XML-basierten Syntax von XSLT war dasselbe in LINQ to XML (sogar in VB mit XML-Literalen) normalerweise um ein Vielfaches länger. Sehr oft wird es jedoch aufgrund der unnötigen Verwendung von XML in einigen Fällen in erster Linie unverdient.

Um es zusammenzufassen: Es ist ein unglaublich nützliches Werkzeug, das man in der Toolbox haben kann, aber es ist sehr spezialisiert. Es ist also gut, solange man es richtig und für den beabsichtigten Zweck verwendet. Ich wünschte wirklich, es gäbe eine ordnungsgemäße, native .NET-Implementierung von XSLT 2.0.


9

Ich benutze XSLT (mangels besserer Alternative), aber nicht zur Präsentation, sondern nur zur Transformation:

  1. Ich schreibe kurze XSLT-Transformationen, um Massenänderungen an unseren maven pom.xml-Dateien vorzunehmen.

  2. Ich habe eine Pipeline von Transformationen geschrieben, um XML-Schemas aus XMI (UML-Diagramm) zu generieren. Es hat eine Weile funktioniert, aber es wurde schließlich zu komplex und wir mussten es hinter der Scheune herausnehmen.

  3. Ich habe Transformationen verwendet, um XML-Schemas umzugestalten.

  4. Ich habe einige Einschränkungen in XSLT umgangen, indem ich damit ein XSLT generiert habe, um die eigentliche Arbeit zu erledigen. (Haben Sie jemals versucht, ein XSLT zu schreiben, das eine Ausgabe mit Namespaces erzeugt, die erst zur Laufzeit bekannt sind?)

Ich komme immer wieder darauf zurück, weil es das XML, das es verarbeitet, besser umgeht als andere Ansätze, die ich ausprobiert habe und die unnötig verlustbehaftet zu sein scheinen oder XML einfach falsch verstehen. XSLT ist unangenehm, aber ich finde, dass die Verwendung von Sauerstoff es erträglich macht.

Trotzdem untersuche ich die Verwendung von Clojure (einem Lisp), um XML-Transformationen durchzuführen, aber ich bin noch nicht weit genug gekommen, um zu wissen, ob dieser Ansatz mir Vorteile bringt.


XSLT hat mich davor bewahrt, POM-Änderungen in hackischen Shell-Skripten zu schreiben. Ich habe mich mit XML abgefunden, es ist schlecht ... aber es ist besser als alles andere für Markups. XSLT ist schlecht, aber es ist die BESTE Möglichkeit, Transformationen von XML in irgendetwas durchzuführen. XQuery ist cool, aber nicht der beste Weg, um diesen Haufen XML-Unsinn zu beheben, der in einen organisierten Satz von XML-Bedeutungen umgewandelt werden muss.
JM Becker

7

Persönlich habe ich XSLT in einem völlig anderen Kontext verwendet. Das Computerspiel, an dem ich damals arbeitete, verwendete Tonnen von UI-Seiten, die mit XML definiert wurden. Während eines großen Refactors kurz nach einer Veröffentlichung wollten wir die Struktur dieser XML-Dokumente ändern. Wir haben dafür gesorgt, dass das Eingabeformat des Spiels einer viel besseren und schemabewussten Struktur folgt.

XSLT schien die perfekte Wahl für diese Übersetzung aus dem alten Format zu sein -> Neues Format. Innerhalb von zwei Wochen hatte ich für unsere Hunderte von Seiten eine funktionierende Konvertierung von alt zu neu. Ich konnte es auch verwenden, um viele Informationen über das Layout unserer UI-Seiten zu extrahieren. Ich habe relativ einfach Listen erstellt, welche Komponenten in welche eingebettet wurden, und dann habe ich XSLT verwendet, um in unsere Schemadefinitionen zu schreiben.

Aus C ++ stammend, war es auch eine sehr unterhaltsame und interessante Sprache, die man beherrscht.

Ich denke, dass es als Werkzeug zum Übersetzen von XML von einem Format in ein anderes fantastisch ist. Es ist jedoch nicht die einzige Möglichkeit, einen Algorithmus zu definieren, der XML als Eingabe und Ausgabe verwendet etwas . Wenn Ihr Algorithmus ausreichend komplex ist, spielt die Tatsache, dass es sich bei der Eingabe um XML handelt, für die Auswahl des Tools keine Rolle - dh rollen Sie Ihren eigenen in C ++ / Python / was auch immer.

Speziell für Ihr Beispiel würde ich mir vorstellen, dass die beste Idee darin besteht, eine eigene XML-> XML-Konvertierung zu erstellen, die Ihrer Geschäftslogik folgt. Schreiben Sie als Nächstes einen XSLT-Übersetzer, der sich nur mit Formatierung auskennt und nichts Kluges tut. Das mag ein guter Mittelweg sein, aber es hängt ganz davon ab, was Sie tun. Wenn Sie einen XSLT-Übersetzer in der Ausgabe haben, können Sie einfacher alternative Ausgabeformate erstellen - druckbar, für Handys usw.


6

Ja, ich benutze es oft. Durch die Verwendung verschiedener xslt-Dateien kann ich dieselbe XML-Quelle verwenden, um mehrere polyglotte (X) HTML-Dateien (die dieselben Daten auf unterschiedliche Weise darstellen), einen RSS-Feed, einen Atom-Feed, eine RDF-Deskriptordatei und ein Fragment einer Sitemap zu erstellen .

Es ist kein Allheilmittel. Es gibt Dinge, die es gut macht, und Dinge, die es nicht gut macht, und wie bei allen anderen Aspekten der Programmierung geht es darum, das richtige Werkzeug für den richtigen Job zu verwenden. Es ist ein Tool, das sich lohnt, in Ihrer Toolbox zu haben, aber es sollte nur verwendet werden, wenn es angemessen ist.


4

Ich würde definitiv empfehlen, es herauszustecken. Insbesondere, wenn Sie Visual Studio verwenden, das integrierte Bearbeitungs-, Anzeige- und Debugging-Tools für XSLT enthält.

Ja, es ist ein Schmerz, während Sie lernen, aber der größte Teil des Schmerzes hat mit Vertrautheit zu tun. Der Schmerz lässt nach, wenn Sie die Sprache lernen.

W3schools hat zwei Artikel, die von besonderem Wert sind: http://www.w3schools.com/xpath/xpath_functions.asp http://www.w3schools.com/xsl/xsl_functions.asp


3

Ich habe festgestellt, dass es ziemlich schwierig ist, mit XSLT zu arbeiten.

Ich habe Erfahrung mit einem System, das dem von Ihnen beschriebenen ähnlich ist. Mein Unternehmen stellte fest, dass die Daten, die wir von "der mittleren Ebene" zurückgaben, in XML waren und dass die Seiten in HTML gerendert werden sollten, das genauso gut XHTML sein könnte, und dass sie gehört hatten, dass XSL ein Standard für die Transformation zwischen XML ist Formate. Daher beschlossen die "Architekten" (womit ich Leute meine, die tiefgreifende Designgedanken haben, aber anscheinend nie Code schreiben), dass unsere vordere Ebene durch das Schreiben von XSLT-Skripten implementiert wird, die die Daten zur Anzeige in XHTML umwandeln.

Die Wahl erwies sich als katastrophal. Es stellt sich heraus, dass XSLT ein Problem beim Schreiben ist. Daher waren alle unsere Seiten schwer zu schreiben und zu pflegen. Wir hätten es viel besser gemacht, JSP (dies war in Java) oder einen ähnlichen Ansatz zu verwenden, bei dem eine Art von Markup (spitze Klammern) für das Ausgabeformat (HTML) und eine andere Art von Markup (wie <% ...) verwendet wurden. %>) für die Metadaten. Das Verwirrendste an XSLT ist, dass es in XML geschrieben ist und von XML in XML übersetzt wird. Es ist ziemlich schwierig, alle drei verschiedenen XML-Dokumente im Kopf zu behalten.

Ihre Situation ist etwas anders: Anstatt wie ich jede Seite in XSLT zu erstellen, müssen Sie nur EIN Codebit in XSLT schreiben (den Code, der von Vorlagen in die Anzeige konvertiert werden soll). Aber es hört sich so an, als wären Sie auf die gleichen Schwierigkeiten gestoßen wie ich. Ich würde sagen, dass der Versuch, ein einfaches XML-basiertes DSL (domänenspezifische Sprache) wie Sie zu interpretieren, NICHT eine der Stärken von XSLT ist. (Obwohl es den Job machen kann ... schließlich ist es Turing komplett!)

Wenn das, was Sie hatten, einfacher war: Sie haben Daten in einem XML-Format und wollten einfache Änderungen daran vornehmen - kein vollständiges DSL mit Seitenbeschreibung, sondern einige einfache, unkomplizierte Änderungen, dann ist XSLT ein hervorragendes Werkzeug für diesen Zweck. Die deklarative (nicht prozedurale) Natur ist tatsächlich ein Vorteil für diesen Zweck.

- Michael Chermside


3

Es ist schwierig, mit XSLT zu arbeiten, aber sobald Sie es erobert haben, haben Sie ein sehr gründliches Verständnis des DOM und des Schemas. Wenn Sie auch XPath verwenden, sind Sie auf dem Weg, funktionale Programmierung zu lernen, und dies wird neuen Techniken und Möglichkeiten zur Lösung von Problemen ausgesetzt sein. In einigen Fällen ist eine sukzessive Transformation leistungsfähiger als prozedurale Lösungen.


heh - Sie erhalten eine ziemlich gute Vorstellung von xpath und dem DOM, wenn Sie Ihren eigenen benutzerdefinierten Transformationscode schreiben. Es gab viele Dinge, einschließlich, aber nicht beschränkt auf: Ändern der Größe von Bildern, Generieren von Javascript (aus XML), Lesen aus dem Dateisystem, um Navigation zu generieren usw.
Nickf

3

Ich verwende XSLT ausgiebig für ein benutzerdefiniertes Front-End im MVC-Stil. Das Modell wird in XML "serialisiert" (nicht über xml serializaiton) und dann über xslt in HTML konvertiert. Der Vorteil gegenüber ASP.NET liegt in der natürlichen Integration mit XPath und den strengeren Anforderungen an die Form (es ist viel einfacher, über die Dokumentstruktur in xslt zu argumentieren als in den meisten anderen Sprachen).

Leider enthält die Sprache einige Einschränkungen (z. B. die Möglichkeit, die Ausgabe einer anderen Transformation zu transformieren), was bedeutet, dass die Arbeit gelegentlich frustrierend ist.

Die leicht erreichbare, stark erzwungene Trennung von Bedenken, die sie gewährt, sehe ich derzeit nicht in einer anderen Technologie - daher würde ich sie für Dokumententransformationen immer noch empfehlen.


3

Ich habe XML, XSD und XSLT irgendwann im Jahr 2004 für ein Integrationsprojekt zwischen sehr unterschiedlichen DB-Systemen verwendet. Ich musste XSD und XSLT von Grund auf lernen, aber es war nicht schwer. Das Tolle an diesen Tools war, dass ich datenunabhängigen C ++ - Code schreiben konnte, wobei ich mich auf XSD und XSLT stützte, um die XML-Dokumente zu validieren / verifizieren und dann zu transformieren. Ändern Sie das Datenformat, ändern Sie die XSD- und XSLT-Dokumente, nicht den C ++ - Code, in dem die Xerces-Bibliotheken verwendet wurden.

Aus Interesse: Die Haupt-XSD betrug 150 KB und die durchschnittliche Größe der XSLT betrug <5 KB IIRC.

Der andere große Vorteil ist, dass die XSD ein Spezifikationsdokument ist, auf dem die XSLT basiert. Die beiden arbeiten in Harmonie. Und Spezifikationen sind heutzutage in der Softwareentwicklung selten.

Obwohl ich nicht allzu viele Probleme hatte, die deklarative Natur von XSD und XSLT zu lernen, stellte ich fest, dass andere C / C ++ - Programmierer große Probleme hatten, sich an die deklarative Art anzupassen. Als sie sahen, dass es das war, murmelten sie prozedural, jetzt wo ich es verstehe! Und sie gingen weiter (Wortspiel?), Um prozedurales XSLT zu schreiben! Die Sache ist, dass Sie XPath lernen und die Achsen von XML verstehen müssen. Erinnert mich an alte C-Programmierer, die sich beim Schreiben von C ++ an die Verwendung von OO gewöhnt haben.

Ich habe diese Tools verwendet, da sie es mir ermöglichten, eine kleine C ++ - Codebasis zu schreiben, die von allen bis auf die grundlegendsten Änderungen der Datenstruktur isoliert war. Letztere waren Änderungen der DB-Struktur. Obwohl ich C ++ einer anderen Sprache vorziehe, verwende ich das, was ich für nützlich halte, um die langfristige Rentabilität eines Softwareprojekts zu verbessern.


3

Früher dachte ich, XSLT sei eine großartige Idee. Ich meine es ist eine großartige Idee.

Wo es fehlschlägt, ist die Ausführung.

Das Problem, das ich im Laufe der Zeit entdeckte, war, dass Programmiersprachen in XML nur eine schlechte Idee sind. Es macht das Ganze undurchdringlich. Insbesondere denke ich, dass XSLT sehr schwer zu lernen, zu codieren und zu verstehen ist. Das XML zusätzlich zu den funktionalen Aspekten macht das Ganze einfach zu verwirrend. Ich habe ungefähr 5 Mal in meiner Karriere versucht, es zu lernen, und es bleibt einfach nicht hängen.

OK, Sie könnten es "bearbeiten" - ich denke, das war teilweise der Punkt des Designs -, aber das ist der zweite Fehler: Alle XSLT-Tools auf dem Markt sind ganz einfach ... Mist!


1
Es scheint mir, dass Sie gerade Ihre Probleme mit XSLT beschrieben haben, keine Probleme mit der Sprache selbst. Ich muss sagen, dass Sie wahrscheinlich die falschen Werkzeuge verwenden :)
Nic Gibson

2

Die XSLT-Spezifikation definiert XSLT als "eine Sprache zum Transformieren von XML-Dokumenten in andere XML-Dokumente". Wenn Sie versuchen, etwas anderes als die grundlegendste Datenverarbeitung in XSLT zu tun, gibt es wahrscheinlich bessere Lösungen.

Beachten Sie auch, dass die Datenverarbeitungsfunktionen von XSLT in .NET mithilfe benutzerdefinierter Erweiterungsfunktionen erweitert werden können:


1
Das Erweitern der Standardsprache mit nicht standardmäßigen Erweiterungen ist das Schlimmste, was man tun kann. Am Ende haben Sie weder XSLT- noch CLR-Code.
Piotr Dobrogost

Fair, das heißt nicht, dass es manchmal nicht nützlich ist
Eric Schoonover

2

Ich unterhalte ein Online-Dokumentationssystem für mein Unternehmen. Die Autoren erstellen die Dokumentation in SGML (einer XML-ähnlichen Sprache). Die SGML wird dann mit XSLT kombiniert und in HTML umgewandelt.

Auf diese Weise können wir problemlos Änderungen am Dokumentationslayout vornehmen, ohne eine Codierung vornehmen zu müssen. Es ist nur eine Frage der Änderung des XSLT.

Das funktioniert gut für uns. In unserem Fall handelt es sich um ein schreibgeschütztes Dokument. Der Benutzer interagiert nicht mit der Dokumentation.

Durch die Verwendung von XSLT arbeiten Sie außerdem näher an Ihrer Problemdomäne (HTML). Ich halte das immer für eine gute Idee.

Wenn Ihr aktuelles System funktioniert, lassen Sie es in Ruhe. Ich würde niemals vorschlagen, Ihren vorhandenen Code zu verwerfen. Wenn ich von vorne anfangen würde, würde ich XSLT verwenden, aber in Ihrem Fall würde ich das verwenden, was Sie haben.


2

Es kommt darauf an, wofür Sie es brauchen. Seine Hauptstärke ist die einfache Wartbarkeit der Transformation, und das Schreiben eines eigenen Parsers löscht dies im Allgemeinen aus. Trotzdem ist ein System manchmal klein und einfach und benötigt wirklich keine "ausgefallene" Lösung. Solange Ihr codebasierter Builder austauschbar ist, ohne dass anderer Code geändert werden muss, ist dies keine große Sache.

Was die Hässlichkeit von XSL betrifft, ist es ja hässlich. Ja, es ist gewöhnungsbedürftig. Aber sobald Sie den Dreh raus haben (sollte IMO nicht lange dauern), läuft es tatsächlich reibungslos. Kompilierte Transformationen laufen meiner Erfahrung nach ziemlich schnell, und Sie können sie mit Sicherheit debuggen.


2

Ich glaube immer noch, dass XSLT nützlich sein kann, aber es ist eine hässliche Sprache und kann zu einem schrecklichen unlesbaren, nicht wartbaren Durcheinander führen. Zum einen, weil XML nicht lesbar genug ist, um eine "Sprache" zu bilden, und zum anderen, weil XSLT irgendwo zwischen deklarativ und prozedural liegt. Abgesehen davon, und ich denke, ein Vergleich kann mit regulären Ausdrücken gezogen werden, hat er seine Verwendung, wenn es um einfache, gut definierte Probleme geht.

Die Verwendung des alternativen Ansatzes und das Parsen von XML in Code kann ebenso unangenehm sein, und Sie möchten wirklich eine Art XML-Marshalling- / Bindungstechnologie (wie JiBX in Java) verwenden, die Ihr XML direkt in ein Objekt konvertiert.


2

Wenn Sie XSLT in einem deklarativen Stil verwenden können (obwohl ich nicht ganz damit einverstanden bin, dass es sich um eine deklarative Sprache handelt), halte ich es für nützlich und ausdrucksstark.

Ich habe Web-Apps geschrieben, die eine OO-Sprache (in meinem Fall C #) verwenden, um die Daten- / Verarbeitungsschicht zu verarbeiten, aber XML anstelle von HTML ausgeben. Dies kann dann direkt von Clients als Daten-API verwendet oder von XSLTs als HTML gerendert werden. Da das C # XML ausgab, das strukturell mit dieser Verwendung kompatibel war, war alles sehr reibungslos und die Präsentationslogik wurde deklarativ gehalten. Es war einfacher zu folgen und zu ändern, als die Tags von C # zu senden.

Wenn Sie jedoch mehr Verarbeitungslogik auf XSLT-Ebene benötigen, wird diese kompliziert und ausführlich - selbst wenn Sie den Funktionsstil "verstehen".

Natürlich hätte ich diese Web-Apps heutzutage wahrscheinlich über eine RESTful-Oberfläche geschrieben - und ich denke, dass Daten- "Sprachen" wie JSON in Bereichen an Bedeutung gewinnen, in denen XML traditionell von XSLT transformiert wurde. Derzeit ist XSLT jedoch noch eine wichtige und nützliche Technologie.


1

Ich habe viel Zeit in XSLT verbracht und festgestellt, dass es in manchen Situationen zwar ein nützliches Werkzeug ist, aber definitiv nicht alles. Es funktioniert sehr gut für B2B-Zwecke, wenn es für die Datenübersetzung für maschinenlesbare XML-Eingabe / Ausgabe verwendet wird. Ich glaube nicht, dass Sie in Ihrer Erklärung der Einschränkungen auf dem falschen Weg sind. Eines der Dinge, die mich am meisten frustrierten, waren die Nuancen bei der Implementierung von XSLT.

Vielleicht sollten Sie sich einige der anderen verfügbaren Markup-Sprachen ansehen. Ich glaube, Jeff hat einen Artikel zu diesem Thema über Stack Overflow geschrieben.

Ist HTML eine humane Markup-Sprache?

Ich würde mir ansehen, was er geschrieben hat. Sie können wahrscheinlich ein Softwarepaket finden, das "out of the box" oder zumindest ganz in der Nähe das tut, was Sie wollen, anstatt Ihre eigenen Sachen von Grund auf zu schreiben.


1

Ich bin derzeit damit beauftragt, Daten von einer öffentlichen Site zu kratzen (ja, ich weiß). Zum Glück entspricht es xhtml, sodass ich xslt verwenden kann, um die benötigten Daten zu sammeln. Die resultierende Lösung ist lesbar, sauber und kann bei Bedarf leicht geändert werden. Perfekt!


1

Ich habe XSLT schon einmal benutzt. Die Gruppe von 6 .xslt-Dateien (aus einer großen umgestaltet) umfasste ungefähr 2750 Zeilen, lange bevor ich sie in C # umschrieb. Der C # -Code besteht derzeit aus 4000 Zeilen, die viel Logik enthalten. Ich möchte nicht einmal darüber nachdenken, was das nötig hätte, um in XSLT zu schreiben.

Der Punkt, an dem ich aufgab, war, als ich feststellte, dass das Fehlen von XPATH 2.0 meinen Fortschritt erheblich beeinträchtigte.


2
Ja, XSLT ist nicht alles schlecht und hat einige wirklich coole Anwendungsfälle, aber Microsoft, das XSLT 2.0 nicht akzeptiert, ist ein Schmerz.
Daren Thomas

1
Sagen Sie uns, wie groß der C # -Code war, nachdem Sie diese 2750 XSLT-Zeilen neu geschrieben haben. Die Angabe der aktuellen Größe sagt nichts aus.
Piotr Dobrogost

1

So beantworten Sie Ihre drei Fragen:

  1. Ich habe XSLT vor einigen Jahren einmal verwendet.
  2. Ich glaube, dass XSLT unter bestimmten Umständen die richtige Lösung sein könnte. (Sag niemals nie)
  3. Ich stimme Ihrer Einschätzung eher zu, dass dies hauptsächlich für „einfache“ Transformationen nützlich ist. Aber ich denke, solange Sie XSLT gut verstehen, gibt es einen Grund, es für größere Aufgaben wie das Veröffentlichen einer Website als in HTML transformiertes XML zu verwenden.

Ich glaube, der Grund, warum viele Entwickler XSLT nicht mögen, ist, dass sie das grundlegend andere Paradigma, auf dem es basiert, nicht verstehen. Aber angesichts des jüngsten Interesses an funktionaler Programmierung könnte XSLT ein Comeback erleben ...


1

Ein Ort, an dem xslt wirklich glänzt, ist das Generieren von Berichten. Ich habe festgestellt, dass ein zweistufiger Prozess, bei dem der erste Schritt die Berichtsdaten als XML-Datei exportiert und der zweite Schritt den visuellen Bericht aus der XML mit xslt generiert. Dies ermöglicht nette visuelle Berichte, während die Rohdaten bei Bedarf als Validierungsmechanismus verwendet werden.


1

Bei einem früheren Unternehmen haben wir viel mit XML und XSLT gemacht. Sowohl XML als auch XSLT sind groß.

Ja, es gibt eine Lernkurve, aber dann haben Sie ein leistungsstarkes Tool für den Umgang mit XML. Und Sie können XSLT sogar für XSLT verwenden (was manchmal nützlich sein kann).

Die Leistung ist ebenfalls ein Problem (bei sehr großem XML). Sie können dies jedoch mithilfe von Smart XSLT beheben und einige Vorverarbeitungen mit dem (generierten) XML durchführen.

Jeder, der XSLT kennt, kann das Erscheinungsbild des fertigen Produkts ändern, da es nicht kompiliert ist.


1

Ich persönlich mag XSLT, und Sie möchten vielleicht die vereinfachte Syntax angeben einen Look geben (keine expliziten Vorlagen, nur eine normale alte HTML-Datei mit ein paar XSLT-Tags, um Werte darin zu spucken), aber es ist nicht jedermanns Sache.

Vielleicht möchten Sie Ihren Autoren nur ein einfaches Wiki oder eine Markdown-Oberfläche anbieten. Auch dafür gibt es Bibliotheken, und wenn XSLT für Sie nicht funktioniert, funktioniert XML möglicherweise auch nicht für sie.


0

XSLT ist nicht das A und O der XML-Transformation. Es ist jedoch sehr schwierig, anhand der gegebenen Informationen zu beurteilen, ob dies die beste Lösung für Ihr Problem gewesen wäre oder ob es andere effizientere und wartbarere Ansätze gibt. Sie sagen, die Autoren könnten ihren Inhalt in einem vereinfachten Format eingeben - in welchem ​​Format? Textfelder? In welche Art von HTML haben Sie es konvertiert? Um zu beurteilen, ob XSLT das richtige Werkzeug für den Job ist, wäre es hilfreich, die Merkmale dieser Transformation genauer zu kennen.


Die Autoren schreiben XML in einem Texteditor. Im Grunde ist es ein vereinfachtes HTML - einige Dinge wurden entfernt, um ein konsistentes Styling zu erzwingen, Dinge wie ein <video /> -Tag wurden als Abkürzung für komplexeres HTML hinzugefügt. Andere Elemente werden verwendet, um Menüs / Bibliographie / Glossare usw. zu
erstellen

0

Ich verwende XSLT nur zum Ändern der Baumstruktur von XML-Dokumenten. Ich finde es umständlich, alles im Zusammenhang mit der Textverarbeitung zu tun und dies in ein benutzerdefiniertes Skript zu verwandeln, das ich möglicherweise vor oder nach dem Anwenden eines XSLT auf ein XML-Dokument ausführen kann.

XSLT 2.0 enthielt viel mehr Zeichenfolgenfunktionen, aber ich denke, es passt nicht gut zur Sprache, und es gibt nicht viele Implementierungen von XSLT 2.0.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.