1. Oktober 2010

Die Fallen von XSLT

Die Bearbeitung eines HTML-Dokuments:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">

Wenn in dem HTML eben oben stehende Zeile vorkommt bzw. irgendwas mit xmlns dann haben wir eine kleine Tücke in XSLT mit der Adressierung der einzelnen Elemente, sofern wir nicht den Namespace nutzen der auf der angegebenen Seite definiert wird.
Das führte dazu, das ich letztlich nichts adressieren konnte und mich gewundert habe, wieso es nicht geht, ich habe dann die ganzen Attribute aus dem HTML-Element rausgeworfen und konnte somit ohne Namespace-Angabe alle Elemente normal adressieren.


Ausgegebener Text obwohl garnicht gewollt:

Es wird oftmals Text ausgegeben, für den wir keine explizite Behandlung definieren, so wurden mir irgendwelche Texte rausgeworfen, die mein schönes Stylesheet unnütz machten, das ganze wurde dann wie folgt durch das einfügen eines Template-Blocks im Stylesheet unterdrückt:

<xsl:template match="text()"/>

Es wurde kein Text mehr ausgegeben, für den nicht explizit von mir eine Ausgabe vorgesehen war.


Die Rückwerts gerichtete Achse bei preceding-sibling:

<xsl:value-of select="preceding-sibling::a[1]/@name"/>

Ich wollte ein vorhergehendes Geschwister-Element von "h4" adressieren nämlich "a", und hatte zuerst das [1] weg gelassen, was dazu führte das als Ausgabe immer das erste "a" adressiert wurde.
Nun habe ich das 1. "a" auf der Geschwisterliste adressiert und siehe da, es kommt genau das vorhergehende "a" was ich brauchte, was uns zu dem Schluss bringt, das aus Sicht von "h4" (die ja zum Anfang, also zurück guckt) das 1. Element im Ablauf das letzte aus seiner Sicht ist.
Das direkte Geschwisterelement also das 1. Element im Array ist.


Soweit einige kleine Tücken die sich mir offenbart haben gestern, aber sie sind nun alle gelöst und mein Stylesheet funktioniert nun so, wie es sollte.
Ich hoffe ich kann mit dieser kleinen Liste jenen helfen, die vielleicht auch mal mit XSLT anfangen und ähnliche Probleme haben. Sollte etwas unverständlich sein, einfach per Kommentar "schreien".

0 Kommentare:

Kommentar veröffentlichen