Hallo,
Habe zwei Fragen zu einer XSL-IF-Anweisung....
Ich will, dass wenn eine bestimmte Zeichenkette in einem XML-Tag vorkommt der Eintrag fett gedruckt wird.
Ich habe versucht es so zu machen:
<xsl:if test="tag = 1"> <b> </xsl:if>
Am Ende soll der <b> Tag wieder geschlossen werden...
<xsl:if test="tag = 1"> </b> </xsl:if>
Aber das geht nicht ;) !
<xsl:if test="tag = 1">
<b>
andere XSL-Anweisungen wie z.B: <xsl:value-of select="tag" />
</b>
</xsl:if>
Wie kann ich den IF Operator auf "ähnlich" stellen? Also dass die Einträge nicht genau verglichen werden, sondern die Anweisung auch ausgeführt wird wenn das Wort innerhalb des XML-Eintrags vorkommt. Klar? :)
Bsp.:
Im XML Tag steht folgendes: <bsptag>hallolalawas</bsptag>
Wie muss ich die IF-Anweisung formulieren damit die IF Anweisung ausgeführt wird, ich den Eintrag aber nur nach "hallo" absuchen will?<xsl:if test="bsptag = hallo">b </xsl:if>
Entweder du machst ein Einfach:
<xsl:if test="contains(bsptag, 'hallo')">
<b>
<xsl:value-of select="bsptag" />
</b>
</xsl:if>
oder etwas ausgefeilter wegen Groß- und Kleinschreibung:
<xsl:if test="contains(translate(bsptag, 'ABCDEFGHIJKLMNOÖPQRSTUÜVWXYZ', 'abcdefghijklmnoöpqrstuüvwxyz'), 'hallo')">
<b>
<xsl:value-of select="bsptag" />
</b>
</xsl:if>
Aber wenn du daruf "versessen" bist, nur den gesuchten Text fett zu markieren, muss du mit einem rekursiven Template arbeiten:
<xsl:template match="Element">
<xsl:call-template name="markieren">
<xsl:with-param name="elem" select="." />
<xsl:with-param name="suchtext" select="'Text der gesucht wird'" />
</xsl:call-template>
</xsl:template>
<xsl:template name="markieren">
<xsl:param name="elem" />
<xsl:param name="suchtext" />
xsl:choose
<xsl:when test="contains($elem, $suchtext)">
<xsl:value-of select="substring-before($elem, $suchtext)" />
<b><xsl:value-of select="$suchtext" /></b>
<xsl:call-template name="markieren">
<xsl:with-param name="elem" select="substring-after($elem, $suchtext)" />
<xsl:with-param name="suchtext" select="$suchtext" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:value-of select="$elem" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
dies berücksichtigt aber die Groß- und Kleinschriebung (d.h. wenn du nach "foo" suchst wird "Foo" oder "foO" nicht gefunden).
Grüße
Thomas