XSL-If Anweisung
Dready
- xsl
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 ;) !
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>
Hello out there!
Ich will, dass wenn eine bestimmte Zeichenkette in einem XML-Tag vorkommt der Eintrag fett gedruckt wird.
Nein, willst du nicht. Es soll nicht im _Tag_ vorkommen, sondern im _Inhalt_ des _Elements_. [MI]
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 ;) !
Na wenn dich das freut ... ;-)
Nein, du musst richtig schachteln:
<xsl:choose>
<xsl:when test="...">
<b>
...
</b>
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
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? :)
Ob das in http://de.selfhtml.org/@title=SELFHTML drinsteht? Mal nachschauen. Click.
Hm, HTML nich, CSS nich, JavaScript nich ... wohl http://de.selfhtml.org/xml/@title=XML. Click.
Wohl http://de.selfhtml.org/xml/darstellung/@title=Darstellung. Click.
Stylesheets nich, Grundlagen nicht, Beispiele nich. Wohl http://de.selfhtml.org/xml/darstellung/xsltelemente.htm@title=XSLT-Elemente. Click.
Wohl doch nich. Also http://de.selfhtml.org/xml/darstellung/@title=zurück. Click.
Dann wohl http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm@title=XPath-Syntax. Click.
Wohl auch nich. Also http://de.selfhtml.org/xml/darstellung/@title=zurück. Click.
Dann wohl http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm@title=XPath-Funktionen. Click.
Hm, „auf bestimmte Teilzeichenkette überprüfen“ hört sich doch gut an ...
See ya up the road,
Gunnar
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