2010-02-03 15 views
12

Necesito crear XSL que compruebe una condición "no contiene". Por ejemplo, mi XML es así:XSLT: no contiene cheque

<Categories> 
    <category> 
    <blog>ABC</blog> 
    <link>http://www.msdn.com</link> 
    </category> 
</Categories> 

quiero mostrar todos los <blog> donde <link> no contiene "msdn". No quiero usar iguales porque solo quiero verificar parte del enlace.

Respuesta

29

No estoy seguro exactamente lo que quiere salida HTML , pero espero que esto te pueda ayudar a empezar.

<xsl:template match="category"> 
    <xsl:if test="not(contains(link, 'msdn'))"> 
     <a href="{link}"> 
      <xsl:value-of select="blog" /> 
     </a> 
    </xsl:if> 
</xsl:template> 

También podría incluir la prueba en el partido de la plantilla (o las apply-templates select) predicado como esto:

<xsl:template match="category[not(contains(link, 'msdn'))]"> 
+1

Probablemente comprobaría 'not (starts-with (subscring-after (link, ': //'), 'www .msdn.com ')) ', para que el emparejamiento sea inequívoco. – Tomalak

+0

yup funciona bien gracias ... – TSSS22

+0

¿Tiene alguna idea de cómo comprobar que el conteo no (contiene()) es cero – TSSS22

1

Use la función no con la función contains.

Ejemplo: no (contiene ('XML', 'XM'))

Resultado: falsa

http://www.w3schools.com/Xpath/xpath_functions.asp

+0

Gracias por la respuesta que resolvió mi prblem pero me puede decir que quiero mostrar msg como registro no encontrado cuando el recuento es 0 para no (contiene (enlace, MSDN)) .... cómo para lograr esto – TSSS22

+0

ver Como esta es realmente una pregunta independiente, debe crear una nueva publicación para ella. –

+0

mira esto: http://www.stylusstudio.com/w3c/xslt/message.htm –

0

XPath para xsl: apply-templates o xsl: value-of deberían incluyen los siguientes

/Categories/category/blog[not(contains(following-sibling::link/text(), 'msdn'))]