2009-01-14 9 views
5

J'essaye d'obtenir xpath à partir de la variable xsl en utilisant xsl ver 1.0. Ce est ma variable:get xpath à partir de la variable xsl

<xsl:variable name ="myVar"> 
     <RefData RefTag="test1" bbb="false" /> 
     <RefData RefTag="test2" bbb="false" /> 
     <RefData RefTag="test3" bbb="false" /> 
     <RefData RefTag="test4" bbb="true" /> 
     <RefData RefTag="test5" bbb="false" /> 
     <RefData RefTag="test6" bbb="false" /> 
    </xsl:variable> 

Je suis en train d'obtenir bbb valeur attribure en utilisant la valeur RefTag:

<xsl:if test="$myVar/RefData[@RefTag = 'test3']/@bbb"> 

cela ne fonctionne pas. "Pour utiliser un fragment d'arborescence des résultats dans une expression de chemin, convertissez-le d'abord en un ensemble de nœuds à l'aide de la fonction msxsl: node-set()."

Je ne comprends pas comment utiliser la fonction msxsl: node-set(), et de toute façon je préfère ne pas utiliser namespace msxsl.

Quelqu'un peut-il aider ici?

Répondre

8

Une solution qui n'a pas besoin du xxx: node-set() l'extension est la suivante:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
<!--           --> 
    <xsl:variable name ="myVar"> 
     <RefData RefTag="test1" bbb="false" /> 
     <RefData RefTag="test2" bbb="false" /> 
     <RefData RefTag="test3" bbb="false" /> 
     <RefData RefTag="test4" bbb="true" /> 
     <RefData RefTag="test5" bbb="false" /> 
     <RefData RefTag="test6" bbb="false" /> 
    </xsl:variable> 
<!--           --> 
    <xsl:variable name="vrefVar" select= 
    "document('')/*/xsl:variable[@name='myVar']" 
    /> 
<!--           --> 
    <xsl:template match="/"> 
     <xsl:value-of select="$vrefVar/*[@RefTag='test3']/@bbb"/> 
    </xsl:template> 
</xsl:stylesheet> 

Lorsque le transfert ci-dessus ormation est appliqué sur tout document XML (non utilisé), le résultat recherché est produit:

false

Prenez note l'utilisation du XSLT document() fonction afin d'accéder au nécessaire <xsl:variable> simplement comme un élément dans un document XML.

1
<xsl:variable name="myVariable" select="msxsl:node-set($myVar)"/> 

Vous pouvez éviter l'espace de noms msxsl en déplaçant le contenu des variables vers le fichier XML source.

-1

En supposant que ce XML:

<test1> 
    <RefData RefTag="test1"/> 
    <RefData RefTag="test2"/> 
    <RefData RefTag="test3"/> 
    <RefData RefTag="test4"/> 
    <RefData RefTag="test5"/> 
    <RefData RefTag="test6"/> 
</test1> 

Quelque chose comme cela pourrait fonctionner:

<xsl:template match="/"> 
    <xsl:apply-templates select="test1/RefData"/> 
</xsl:template> 

    <xsl:template match="RefData"> 
    <xsl:variable name="myVar"> 
     <xsl:choose> 
     <xsl:when test="@RefTag = 'test1'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test2'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test3'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test4'">true</xsl:when> 
     <xsl:when test="@RefTag = 'test5'">false</xsl:when> 
     <xsl:when test="@RefTag = 'test6'">false</xsl:when> 
     <xsl:otherwise>true</xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 
    <!--<text x="{$myVar}"/>--> 
    </xsl:template> 
+0

Je pense que vous n'avez pas compris la question. ces données ne sont pas dans le xml d'entrée, donc je ne peux pas supposer que le xml est présent. J'ai besoin d'utiliser xsl: variable – Schwartser

Questions connexes