2012-01-12 18 views
8

को देखते हुएवैरिएबल: टेम्पलेट से मेल खाते नमूने

एक वैश्विक चर के साथ एक XSLT स्टाइलशीट:

<xsl:variable name="lang" select="/response/str[@name='lang']"/> 

प्रश्न

कहाँ सीमा यह है कि विधेय में चर का उपयोग कर आता है से xsl:template मिलान पैटर्न में गलत है, लेकिन xsl:apply-templates पैटर्न में चयन करने के लिए स्वीकार्य है?

<!-- throws compilation error, at least in libxslt --> 
<xsl:template match="list[@name='item_list'][$lang]"/> 

<!-- works as expected --> 
<xsl:template match="list[@name='item_list'][/response/str[@name='lang']]"/> 

<!-- works as expected --> 
<xsl:template match="response"> 
    <xsl:apply-templates select="list[@name='item_list'][$lang]"> 
</xsl:template> 
+0

मुझे यकीन नहीं है कि यह सीमा है, लेकिन क्या आप सुनिश्चित हैं कि आपके '$ lang' में स्ट्रिंग मान (या संख्यात्मक) है लेकिन कुछ नोड सेट नहीं है? – YuS

+0

@yuri, इसमें एक नोड सेट होता है, लेकिन मुझे कोई कारण नहीं दिख रहा है कि संदर्भ में नोड सेट की अनुमति क्यों नहीं है। – newtover

+1

मैं आपको विवरण नहीं बता सकता कि एक्सएसएलटी 1.0 में प्रतिबंध क्यों निर्दिष्ट किया गया था, लेकिन मैं आपको बता सकता हूं कि यह एक्सएसएलटी 2.0 में चला गया है, इसलिए आप भाषा के उस संस्करण में जाने और इसके कार्यान्वयन जैसे एक पर विचार करना चाहेंगे सैक्सन 9 या अल्टोवाएक्सएमएल। –

उत्तर

10

चर XSLT 1.0 में मैच भाव में इस्तेमाल किया जा करने की अनुमति नहीं कर रहे हैं।

XSLT 1.0 विनिर्देश से: Defining Template Rules

यह एक VariableReference को रोकने के लिए मैच विशेषता के मान के लिए एक त्रुटि है।

XSLT 2.0 में मिलान अभिव्यक्तियों में चर को अनुमति दी जाती है।

XSLT 2.0 विनिर्देश से: Syntax of Patterns

पैटर्न एक आईडी एफओ या कुंजी समारोह कॉल के साथ शुरू कर सकते हैं, कि मूल्य मिलान किया जा के रूप में या तो एक शाब्दिक या एक चर के लिए एक संदर्भ आपूर्ति की है प्रदान की या पैरामीटर, और कुंजी नाम (कुंजी फ़ंक्शन के मामले में) स्ट्रिंग अक्षर के रूप में आपूर्ति की जाती है। ये पैटर्न कभी भी पेड़ में नोड से मेल नहीं खाएंगे जिनकी जड़ एक दस्तावेज़ नोड नहीं है।

+0

धन्यवाद! पूछने से ठीक पहले मैंने spec के उस खंड को देखा, लेकिन किसी भी तरह से आपके द्वारा उद्धृत वाक्य को अनदेखा कर दिया। मुझे बेहतर सोने की ज़रूरत है! – newtover

+1

@ न्यूवॉवर: पी एस आपने यह भी पूछा कि क्यों एक चर संदर्भ "xsl में स्वीकार्य है: आवेदन-टेम्पलेट पैटर्न का चयन"। जवाब यह है कि 'xsl: लागू-टेम्पलेट्स' में चयन एक पैटर्न नहीं बल्कि एक XPath अभिव्यक्ति है। पैटर्न XPath अभिव्यक्तियों की तरह बहुत दिखते हैं लेकिन वे समान नहीं हैं। यह चर संदर्भ संदर्भ एक अंतर है (एक्सएसएलटी 1.0 में)। – LarsH

+0

मैड्स, मैं इस बारे में नहीं सोचता कि जब मिलान अभिव्यक्तियों में चर की अनुमति है तो spec के पढ़ने के आधार पर सटीक है। मुझे लगता है कि आप बस कह सकते हैं "XSLT 2.0 में मिलान अभिव्यक्तियों में वेरिएबल्स की अनुमति है" भले ही वे दस्तावेज़ नोड का संदर्भ लें।यह केवल उन पैटर्नों में है जिनमें कुंजी() और आईडी() फ़ंक्शन कॉल शामिल हैं, वे किसी पेड़ में नोड से मेल नहीं खाएंगे, जिसका रूट दस्तावेज़ नोड नहीं है ... लेकिन यह इस बात को सीमित नहीं करता है कि पैटर्न में चर के मूल्य क्या हो सकते हैं। – LarsH

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