Aus historischen Gründen haben wir eine Mischung aus
%Vor%und
%Vor%und
%Vor%innerhalb einer Include-Hierarchie von XSL-Dateien. Jetzt wollen wir umgestalten, damit alle XSL-Dateien die gleiche Ausgabemethode verwenden.
Am Ende wollen wir XHTML-Ausgabe erzeugen, also nehme ich an, dass letztere die beste Wahl wäre.
Aber was sind die Unterschiede zwischen diesen drei Ausgabemethoden und welche würden Sie für welche Art von Lösung verwenden?
Bearbeiten: Ich verwende XSLT 2.0
Ich fand die Antwort durch Lesen der XSLT 2.0-Spezifikation ( XSLT 2.0 und XQuery 1.0 Serialization ).
Gegeben eine leere Instanz eines XHTML Element, dessen Inhaltsmodell nicht vorhanden ist LEER (z. B. ein leerer Titel oder Abschnitt) der Serializer darf nicht verwenden die minimierte Form. Das heißt, es muss Ausgabe
<p></p>
und nicht<p />
.Gegeben ein XHTML-Element, dessen Inhalt Modell ist leer, der Serialisierer muss Verwenden Sie die minimierte Tag-Syntax, z Beispiel
<br />
, als Alternative Syntax<br></br>
erlaubt von XML gibt in vielen Fällen ungewisse Ergebnisse vorhandene Benutzeragenten Der Serializer MUSS ein Leerzeichen vor dem einfügen Nachlauf / & gt;<br />
,<hr />
und<img src="karen.jpg" alt="Karen" />
.Der Serialisierer darf die Entität NICHT verwenden Referenz
'
, die, obwohl legal in XML und daher in XHTML, ist nicht in HTML definiert und ist nicht von allen HTML-Benutzeragenten erkannt.Der Serializer sollte Namespace ausgeben Deklarationen in einer Weise, die ist im Einklang mit den Anforderungen von die XHTML-DTD, wenn dies möglich ist. Das XHTML 1.0 DTDs erfordern die Deklaration xmlns="http://www.w3.org/1999/xhtml" auf dem HTML-Element erscheinen, und nur auf dem html-Element. Das Serializer MUSS Namespace ausgeben Deklarationen, die konsistent sind mit die Namespace-Knoten in der Ergebnisbaum, aber es muss vermieden werden Ausgabe redundanter Namespaces Deklarationen über Elemente, bei denen die DTD würde sie ungültig machen.
Das heißt, die Antwort verwendet <xsl:output method="xhtml">
.
HTML wird als HTML serialisiert, daher ist die Ausgabe möglicherweise kein wohlgeformtes XML. Wenn Sie nur an Browser senden und nicht daran interessiert sind, als XML zu analysieren, kann das für Sie funktionieren.
XML wird als XML serialisiert, so dass die Ausgabe wohlgeformt ist, aber Sie können bei der Ausgabe Probleme mit Browsern feststellen. Kleine Dinge wie die selbstschließenden Elemente <script />
und <div />
. Um dieses Problem zu vermeiden, müssten Sie Spiele spielen, wie das Hinzufügen von Kommentaren innerhalb des Elements (z. B. <script src="someJSFile.js"><!--don't close my script tag --></script>
)
Wenn Sie über eine XSLT 2.0-Engine verfügen und eine gut formatierte HTML-Ausgabe möchten, ohne sich Sorgen darüber machen zu müssen, wie einige Elemente serialisiert werden, verwenden Sie XHTML.
Soweit ich weiß, gibt es kein method:xhtml
für die xsl:output
-Direktive in xslt 1.0.
wc3schools stimmt dem zu.
Da XHTML ein XML-Dialekt ist, würde ich das verwenden.
Wenn Sie jedoch xslt 2.0 verwenden, können Sie auch xhtml
verwenden. , denn das gibst du aus.