Dready: XSL-If Anweisung

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>

  1. 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

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. 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