String-Literale verarbeiten, die Anführungszeichen enthalten

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Es ist schwierig, in XSLT 1.0 mit String-Literalen klarzukommen, die Anführungszeichen enthalten, da es kein Escape-Zeichen gibt.

Lösung

Dieses Problem wird durch eine Erweiterung abgeschwächt, die den Schutz eines Anführungszeichens erlaubt, indem das Zeichen wiederholt wird. Wir versuchen hier, Strings zu erfassen, die entweder durch doppelte Anführungszeichen oder durch einfache Anführungszeichen getrennt werden. Wir verwenden einfache Anführungszeichen für das test-Attribut, sodass wir für das String-Literal regex doppelte Anführungszeichen einsetzen müssen. Dies zwingt uns, alle wörtlich zu verwendenden doppelten Anführungszeichen zu schützen, indem wir sie in dem regex wiederholen. Die Regeln von XML verlangen von uns, das Entity ' anstelle von ' zu verwenden, allerdings dient das einfach dazu, zu betonen, dass XML-Schutz ein eigenes Problem ist, das selbst noch keine Lösung mitbringt. Falls Sie mit anderen Worten " " durch " " ersetzen würden, dann würden Sie zwar den XML-Parser glücklich machen, der XSLT-Parser dagegen würde sich immer noch verschlucken:

<xsl:if test=' matches(., " "" [^""] "" | &apos;[^&apos;] &apos; ","x") '> </xsl:if>

Eine äquivalente Lösung sieht so aus:

<xsl:if test=" matches(., ' &qout; [^&quot;] &quot; | ''[^''] '' ','x') "> </xsl:if>

Diskussion

Das Fehlen eines Escape-Zeichens in XSLT 1.0 war ärgerlich, man konnte sich aber immer mit Variablen und Verkettung weiterhelfen:

<xsl:variable name="d-quote" select='"'/>
<xsl:variable name="s-quote" select="'"/>
<xsl:value-of select="concat('He said,', $d-quote, 'John', $s-quote, 's', 'dog turned green.', $d-quote)"/>

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de