2009-02-20 19 views
49

Ho il seguente frammento di XSL:C'è una direttiva XSL "contiene"?

<xsl:for-each select="item"> 
    <xsl:variable name="hhref" select="link" /> 
    <xsl:variable name="pdate" select="pubDate" /> 
    <xsl:if test="hhref not contains '1234'"> 
     <li> 
     <a href="{$hhref}" title="{$pdate}"> 
      <xsl:value-of select="title"/> 
     </a> 
     </li> 
    </xsl:if> 
    </xsl:for-each> 

L'istruzione if non funziona perché non sono stato in grado di elaborare la sintassi per contiene. Come potrei esprimere correttamente xsl: if?

risposta

98

Certo che c'è! Per esempio:

<xsl:if test="not(contains($hhref, '1234'))"> 
    <li> 
    <a href="{$hhref}" title="{$pdate}"> 
     <xsl:value-of select="title"/> 
    </a> 
    </li> 
</xsl:if> 

La sintassi è: contains(stringToSearchWithin, stringToSearchFor)

1

Dovrebbe essere qualcosa di simile ...

<xsl:if test="contains($hhref, '1234')"> 

(non testato)

Vedi w3schools (sempre un buon riferimento BTW)

+0

Nelle righe di ...? –

+0

Formattazione del codice corretta. – Tomalak

+0

@cadrian: le parentesi graffe sono sbagliate. – Tomalak

6

esiste effettivamente un XPath contiene la funzione che dovrebbe essere simile:

<xsl:for-each select="item"> 
<xsl:variable name="hhref" select="link" /> 
<xsl:variable name="pdate" select="pubDate" /> 
<xsl:if test="not(contains(hhref,'1234'))"> 
    <li> 
    <a href="{$hhref}" title="{$pdate}"> 
     <xsl:value-of select="title"/> 
    </a> 
    </li> 
</xsl:if> 

1
<xsl:if test="not contains(hhref,'1234')"> 
+0

L'operatore not funziona senza parentesi? Se è così, non lo sapevo. – Cerebrus

+1

@Cerebrus Lo fa in XSLT 2.0, ma non in 1.0 – Stijn

6

Utilizzare la funzione contains()contains().

Funzione: booleanocontiene (string, string)

La funzione contains restituisce true se la prima stringa argomento contiene la seconda stringa argomento, e in caso contrario restituisce false

Problemi correlati