Thomas J.S.: mit xpath in attribute mode schreiben | xml/xsl update datei

Beitrag lesen

Hallo,

... weil im mode-Attribut ein nur ein "qname" d.h. eine qualifizierter XML-Name (http://www.w3.org/TR/xslt#qname) sein muss. D.h. ein Name den du einem Template gegeben hast. Es sind keine Variablen etc. erlaubt.

schade -oder?

Wie man's nimmt.
Es zwingt einem zumindest besser seine Strukturen zu überlegen.

wie könnte man den so ein Problem lösen.

?? wird eine xsl datei eigentlich immer wieder hochgeladen oder immer nur dieselbe benutzt??  ->

Je nach XSLT-Prozessor.

Beim IE7 z. b. muß ich jedesmal das browserFenster schließen, um xsl-Veränderungen zu aktivieren...., dass spräche ja dafür, das xsl-dateien nur einmal geladen werden würden.

Das konnte ich noch nicht nachvollziehen.

Zudem möchte ich noch anmerken, dass eine einzige große XSL-Datei zu halten ist eher schlecht als recht, weil es irgendwann einfach unwartbar ist. Es ist besser bestimmte Funktionalitäten auf mehrere XSL-Dateien zu verteilen und dann diese Dateien in das "eigentliche" XSL zu inkludieren oder sie importieren.

ich meine da einbißchen heraus zuhören, dass du aber trotzdem auch in deiner xslt datei viele stylesheets hast, die manchmal nicht benutzt werden.

Ja und nein.
Ich habe auch XSL-Datei(en) die um die 3000 Zeilen sind, weil es in dem Fall nicht anderes ging.
Normalerweise aber habe ich mehrere XSL-Dateien die verschiedene Funktionen erfüllen. So gab es in einem Projekt z.B. eine XSL-Datei in der nur globale Variablen und Templates enthalten sind, die in jedem anderen XSL gebraucht werden. Eine ander XSL ist nur für die Generierung von Navigationsmenüs zuständig, eine dritte enthählt nur Templates für Links, Bilder, Thumbnails, Flasch, eine weitere enthält nur Templates für News und eine andere generiert nur JavaScript usw.

Viele der "eigentlichen" XSL-Dateien, d.h. die, die für das Erzeugen einer HTML-Seite zuständig sind, haben  nur 60 bis 200 Zeilen, dafür 10 bis 15 import-Anweisungen, je nach dem was gebraucht wird.

Wollte ich hier alles in eine XSL-Datei schreiben, wären das über (pi mal daumen) 30-32 Tsd. Zeilen.

Der Vorteil der starken Trennung von funktionalen Teilen von den eigentlich Layout-Teilen, war dann am deutlichsten zu sehen und zu fühlen, als das gesamte Webauftrifft ein koplett neues Layout bekam. Die XSLs mit den funktinalen Teilen mussten zu 90% überhaupt nicht angerührt werden (was bei insges. etwa 10 Tsd. Codezeilen eine enorme (Arbeits)Erleichterung war).

----

Ich arbeite aktuell an den XSLs für SELFHTML 9, da besteht das XSL das eine normale Inhaltsseite generiert nicht mal aus 140 Zeilen und ich denke nicht, dass das viel mehr wird.

wie steuerst du gezielt die xslt templates an, die du gerade brauchst?

Mit modes oder mit Parameters und mit benannten Templates bzw. aus der Kombination aller drei Möglichkeiten.
z.B.
<xsl:template match="image[not(ancestor::link)]" name="standaloneimagetemplate">
<xsl:template match="image[ancestor::link]" name="imagelinktemplate">
<xsl:template match="image" mode="collection" name="standalonecollectionimage">
<xsl:template match="painting[key('collectionpaintingkey', @id)]" mode="collection">
<xsl:template match="image" mode="collectionthumbnail">
<xsl:template match="painting" mode="collectionthumbnail">
<xsl:template name="imagenavigation">

Alle diese Templates behandeln eigentlich immer nur Bilder. Aber je nach dem wie und was ich davon brauchte wurden diese Templates mit den entsprechenden Parameter (entweder  mit dem Namen oder mit apply-templates) und/oder im entsprechenden Modus aufgerufen.

Grüße
Thomas