2009-01-14 10 views
5

मैं xsl ver 1.0 का उपयोग कर xsl चर से कुछ xpath प्राप्त करने का प्रयास कर रहा हूं। मेरी चर है कि:xsl वैरिएबल से xpath प्राप्त करें

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

मैं RefTag मूल्य का उपयोग कर bbb attribure मूल्य प्राप्त करने की कोशिश कर रहा हूँ:

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

इस काम नहीं कर रहा।

वीएस एक्सएसएल डीबगर एक त्रुटि देता है: "पथ अभिव्यक्ति में परिणाम पेड़ खंड का उपयोग करने के लिए, पहले इसे msxsl: node-set() फ़ंक्शन का उपयोग करके नोड-सेट में परिवर्तित करें।"

मुझे समझ में नहीं आता कि msxsl: node-set() फ़ंक्शन का उपयोग कैसे करें, और वैसे भी मैं msxsl नेमस्पेस का उपयोग नहीं करना पसंद करता हूं।

क्या कोई यहां सहायता कर सकता है?

उत्तर

8

एक समाधान है कि xxx की जरूरत नहीं है: नोड सेट() विस्तार निम्नलिखित है:

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

जब उपरोक्त ट्रांसफ ormation किसी भी XML दस्तावेज़ (इस्तेमाल नहीं किया) पर लागू किया जाता है, वांछित परिणाम उत्पादन किया जाता है:

false

document() समारोह एक तत्व के रूप बस आवश्यक <xsl:variable> तक पहुँचने के लिए XSLT के उपयोग पर ध्यान दें करें एक एक्सएमएल दस्तावेज़ में।

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

आप एमएसएक्सएसएल नेमस्पेस से स्रोत xml में परिवर्तनीय सामग्री को स्थानांतरित करके बच सकते हैं। इस XML

-1

मान लिया जाये:

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

कुछ इस तरह काम कर सकता था:

<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

मुझे लगता है कि आप इस प्रश्न को समझ नहीं पाए। यह डेटा इनपुट xml में नहीं है इसलिए मैं xml abouve नहीं मान सकता। मुझे xsl: variable का उपयोग करने की आवश्यकता है – Schwartser

संबंधित मुद्दे