2009-01-14 22 views
5

xsl değişkenini kullanarak xsl değişkeninden bazı xpath almaya çalışıyorum. benim değişken That: bu olmuyorxsl değişkeninden xpath olsun

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

: Ben RefTag değeri kullanılarak bbb attribure değeri elde çalışıyorum

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

.

VS XSL Hata ayıklayıcısı bir hata döndürür: "Bir yol ifadesinde bir sonuç ağacı parçası kullanmak için, önce msxsl: node-set() işlevini kullanarak bir düğüm kümesine dönüştürün."

msxsl: node-set() işlevini nasıl kullanacağımı anlamıyorum ve her neyse msxsl namesapce kullanmamayı tercih ediyorum.

Burada herhangi biri yardımcı olabilir mi?

cevap

8

bir çözüm xxx ihtiyacı yoktur: düğüm-set() uzantısı şudur:

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

Yukarıdaki transfere gelindiğinde ormation herhangi bir XML belgesine (kullanılmıyor) uygulanır, istenilen sonuç üretilir:

false

document() fonksiyon bir unsuru olarak basitçe gerekli <xsl:variable> erişmek için XSLT'de kullanımına dikkat musunuz bir xml belgesinde.

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

Değişken içeriğini source xml'ye taşıyarak msxsl ad alanını kullanabilirsiniz.

-1

varsayarsak bu XML:

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

şey işe yarayabilir:

<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

Soruyu anlamadığını düşünüyorum. Bu veri xml girişinde değil, dolayısıyla xml abouve'i kabul edemem. xsl: variable kullanmam gerekiyor – Schwartser