2010-11-11 8 views
1

Salut est là sur la façon de déclarer un lien (par exemple: http: //www.google.com) comme une variable, puis en utilisant la variable pour un autre si? ce?Comment déclarer la variable comme un lien dans XSLT

<xsl:element name="a"> 
<xsl:attribute name="href">http://www.google.com</xsl:attribute>// first get the link 
<xsl:choose> 
<xsl:when test="http://www.google.com"> 
    Do something 1 
</xsl:when> 
<xsl:otherwise> 
    Do something 2 
</xsl:choose> 
</xsl:element> 

Est-ce possible? Que dois-je regarder?

+0

Voulez-vous faire correspondre le contenu de la chaîne, à savoir « http: // www. Google com. », Ou faire une sorte de résolution ou de validation premier? – dlanod

+0

Il serait utile que vous fournissiez votre XML d'entrée et ce à quoi vous voulez que la sortie ressemble. Sinon, nous ne faisons que deviner ce que vous voulez. –

+0

Bonne question, +1. Voir ma réponse pour un exemple de travail complet. –

Répondre

3

est là loin sur la façon de déclarer un lien (ie: http: //www.google.com) comme une variable puis en utilisant la variable pour un autre si?

Utilisez ce code comme un exemple de travail - bien sûr, vous avez besoin d'apprendre au moins les bases de XSLT:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="vLink" select="'http://www.google.com'"/> 

<xsl:template match="/"> 
    <xsl:choose> 
    <xsl:when test="$vLink = 'http://www.google.com'"> 
     It is the Google link... 
    </xsl:when> 
    <xsl:otherwise> 
    It is not (exactly) the Google link... 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

lorsque cette transformation est appliquée sur tout document XML (non utilisé), le résultat recherché est produit:

It is the Google link... 

On peut également utiliser unglobal. Cela peut être défini de manière externe par l'invocateur de la transformation.

+0

+1 Bonne réponse. –

0

Faites correspondre directement le contenu et déclarez l'URL en tant que variable.

-1

C'est possible dans une certaine mesure, mais il n'y a pas de construction if-else dans XSL. Voici une version que j'ai testé que vous pourriez être en mesure de s'adapter à vos besoins. L'entrée I utilisé était:

<?xml-stylesheet type="text/xsl" href="test.xsl"?> 
<xml> 
    <LinkValue>http://www.google.com/</LinkValue> 
</xml> 

Le XSL montrant « Faites quelque chose 1 » si LinkValue était la chaîne ci-dessus ou « Faites quelque chose 2 » si je l'ai modifié était:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:variable name="LinkValue" select="//LinkValue"/> 
     <xsl:element name="a"> 
      <xsl:attribute name="href"><xsl:value-of select="$LinkValue"/></xsl:attribute> 
      <xsl:if test="$LinkValue = 'http://www.google.com/'"> 
       Do something 1 
      </xsl:if> 
      <xsl:if test="$LinkValue != 'http://www.google.com/'"> 
       Do something 2 
      </xsl:if> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

Espérons que vous pouvez utilisez ces exemples pour déterminer exactement ce que vous devez implémenter pour votre scénario.

+0

Hmmm pas sûr pourquoi la référence que j'utilisais pour XSLT a dit non si-else quand choisir-quand existe. La réponse de Dimitre est meilleure. – dlanod

+0

Merci de votre aide – someguy

0

Si vous en avez besoin plus globalement, essayez ceci:

... 
<xsl:apply-templates select="a" /> 
... 

<xsl:template match="a"> 
    Just a link 
</xsl:template> 

<xsl:template match="a[starts-with(@href, 'http://google.com/') or starts-with(@href, 'http://www.google.com/')]"> 
    Link to google.com 
</xsl:template> 
Questions connexes