मुझे त्रुटि मिलती है कि स्टाइलशीट को संकलित नहीं किया जा सकता है। मोड का मान QName होना चाहिए, लेकिन यह "{$ mode}" है।
क्या चर पर निर्भर मोड का उपयोग करने की संभावना है?
नहीं, यह किसी भी एक्सएसएलटी संस्करण - 1.0, 2.0 या 3.0 में समर्थित नहीं है।
आप उच्च आदेश कार्य का अनुकरण करने (HOF) प्रभाव में कोशिश कर रहे हैं के रूप में, आप XSLT 1.0 में यह करने के लिए FXSL की अंतर्निहित सिद्धांत का उपयोग कर सकते हैं।
FXSL 1.x शुद्ध एक्सएसएलटी 1.0 में लिखे गए टेम्पलेट्स की एक लाइब्रेरी है जो एचओएफ का समर्थन/अनुकरण करता है।
यहां एक संपूर्ण इन सिद्धांतों के आधार पर समाधान है:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net" exclude-result-prefixes="f">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<f:inc/>
<f:double/>
<xsl:variable name="vModeInc" select="document('')/*/f:inc[1]"/>
<xsl:variable name="vModeDouble" select="document('')/*/f:double[1]"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<nums>
<xsl:apply-templates select="$vModeInc">
<xsl:with-param name="pNodes" select="node()"/>
</xsl:apply-templates>
</nums>
==============
<nums>
<xsl:apply-templates select="$vModeDouble">
<xsl:with-param name="pNodes" select="node()"/>
</xsl:apply-templates>
</nums>
</xsl:template>
<xsl:template match="f:inc">
<xsl:param name="pNodes"/>
<xsl:apply-templates select="$pNodes" mode="incr"/>
</xsl:template>
<xsl:template match="f:double">
<xsl:param name="pNodes"/>
<xsl:apply-templates select="$pNodes" mode="double"/>
</xsl:template>
<xsl:template match="num" mode="incr">
<num><xsl:value-of select=".+1"/></num>
</xsl:template>
<xsl:template match="num" mode="double">
<num><xsl:value-of select=".*2"/></num>
</xsl:template>
</xsl:stylesheet>
इस बदलाव निम्नलिखित XML दस्तावेज़ पर लागू किया जाता है:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
चाहता था, सही परिणाम है उत्पादित - nums/num
तत्व दो मोडों में से एक (प्रत्येक) में संसाधित तत्व, डी चर पर लंबित निर्दिष्ट - $vModeInc
या $vModeDouble
(1 प्रत्येक मान को जोड़ा गया) (प्रत्येक मान दो से गुणा किया जाता):
<nums>
<num>2</num>
<num>3</num>
<num>4</num>
<num>5</num>
<num>6</num>
<num>7</num>
<num>8</num>
<num>9</num>
<num>10</num>
<num>11</num>
</nums>
==============
<nums>
<num>2</num>
<num>4</num>
<num>6</num>
<num>8</num>
<num>10</num>
<num>12</num>
<num>14</num>
<num>16</num>
<num>18</num>
<num>20</num>
</nums>
स्रोत
2012-09-06 12:05:48
क्या आप क्या करना चाहते वाक्य रचना अवैध है, लेकिन यह XSLT 1.0 में * संभव * है "टेम्पलेट संदर्भ" सिद्धांत का उपयोग करके, उसी प्रभाव को प्राप्त करने के लिए जो FXSL लाइब्रेरी की नींव है। –
इस विचार के लिए धन्यवाद! मैंने इसे समझने की कोशिश की, लेकिन मैं एक्सएसएलटी में नया हूं और कार्यात्मक प्रोग्रामिंग के साथ ज्यादा अनुभव नहीं है। वर्णित मामले के लिए, यह "अधिक इंजीनियर" है। शायद, मैं इसे कुछ बार उपयोग कर सकता हूं, जब मुझे इसके साथ अधिक अनुभव होता है। – maria90
maria90, यह जानना पर्याप्त है कि ऐसी तकनीक मौजूद है - फिर जब भी आवश्यक हो इसका उपयोग करें। –