Hello out there!
Die Pseudoattribute, die vorkommen können, sind wenige und namentlich bekannt.
Müssen sie gar nicht. „Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.“ [Cheatah]
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
xsl:method="xml"
xsl:encoding="UTF-8"
xsl:standalone="no"
xsl:indent="yes"
/>
<xsl:template match="/">
<quz>
<xsl:apply-templates/>
</quz>
</xsl:template>
<xsl:template match="processing-instruction('foo')">
<foo>
<xsl:call-template name="getNextPseudoattribute">
<xsl:with-param name="string" select="current()"/>
</xsl:call-template>
</foo>
</xsl:template>
<xsl:template name="getNextPseudoattribute">
<xsl:param name="string"/>
<xsl:variable name="pseudoattributeName" select="normalize-space(substring-before($string, '='))"/>
<xsl:variable name="substringAfterEqualSign" select="normalize-space(substring-after($string, '='))"/>
<xsl:variable name="startsWithApos" select='starts-with($substringAfterEqualSign, "'")'/>
<xsl:if test="starts-with($substringAfterEqualSign, '"') or $startsWithApos">
<xsl:variable name="limiter" select="substring($substringAfterEqualSign, 1, 1)"/>
<xsl:variable name="substringAfterLimiter" select="substring($substringAfterEqualSign, 2)"/>
<xsl:variable name="pseudoattributeValue" select="substring-before($substringAfterLimiter, $limiter)"/>
<xsl:attribute name="{$pseudoattributeName}"><xsl:value-of select="$pseudoattributeValue"/></xsl:attribute>
<xsl:call-template name="getNextPseudoattribute">
<xsl:with-param name="string" select="substring-after($substringAfterLimiter, $limiter)"/>
<xsl:with-param name="alternate" select="true()"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
„Aber wem erzähle ich das? Dem wissend zwinkernden? Wahrscheinlich doch nur dem Archiv.“ [at]
Eklig wird’s, weil statt doppelten auch einfache Anführungszeichen stehen können
Tricky ist die Sache mit '"' und "'". Eine Maskierung hab ich nicht hinbekommen; da fiel mir nichts Besseres ein als das Ergebnis des einen Tests in der Variablen startsWithApos abzulegen. Geht das auch ohne? Lassen sich die beiden Zeilen
<xsl:variable name="startsWithApos" select='starts-with($substringAfterEqualSign, "'")'/>
<xsl:if test="starts-with($substringAfterEqualSign, '"') or $startsWithApos">
in nur mit einem 'xsl:if' schreiben?
See ya up the road,
Gunnar
--
„Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
„Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)