दिलचस्प पोस्ट
टाइप स्क्रिप्ट नियंत्रक और कोणीय जेएस का उपयोग करके डेटा को कैसे बाँटें मल्टीपार्ट / फॉर्म-डेटा का उदाहरण क्या डब्लूडबैग नाम में मॉडल प्रॉपर्टी नाम के दृश्यबैग का नाम हो सकता है? मैं अपने एप्लिकेशन में अपने स्प्रिंग बूट एप में हैिकारीप को कैसे कॉन्फ़िगर कर सकता हूं। प्रॉपर्टीज़ फाइलें? क्या मैं stddef.h या cstddef को size_t के लिए शामिल करना चाहिए सॉफ्टमॅक्स फ़ंक्शन – अजगर रेग। एंड्रॉइड स्टूडियो पर सीमके के माध्यम से मूल सी कोड में ओपनसीवी को जोड़ना मेरी छवि के नीचे स्थान क्यों है? जावास्क्रिप्ट / jQuery के साथ बाहरी शैली पत्रक से एक सीएसएस मान प्राप्त करें क्या मैं गुण वस्तुओं के साथ आत्मनिरीक्षण करता हूं और फिर इसे घटा देता हूं? स्प्रिंग बूट: लापता एंबेडेड के कारण एंबेडेड वेब ऍप्लिकेशन्स कॉन्टैक्ट शुरू करने में असमर्थ क्यों stack <const स्ट्रिंग> जी ++ में संकलित नहीं है? $ रूटस्स्कोप। $ प्रसारण बनाम $ दायरा। $ emit इनलाइन छवि के साथ जेईडीटरपैन JQuery का उपयोग करके सफारी का पता लगाएं

XSLT में मैं एक अलग चर से वैश्विक चर कैसे बढ़ाता हूं?

मैं एक एक्सएमएल फाइल प्रसंस्करण कर रहा हूँ, जहां मैं नोड्स की संख्या की गणना करना चाहता हूं, ताकि मैं इसे एक नोड के रूप में इस्तेमाल कर सकूं, क्योंकि मैं नोड्स लिखता हूं।

फिलहाल मेरे पास एक वैश्विक वैरिएबल है जिसे 'काउंटर' कहा जाता है। मैं इसे एक टेम्पलेट के भीतर उपयोग करने में सक्षम हूं, लेकिन मुझे एक टेम्पलेट के अंदर इसे छेड़ने का एक तरीका नहीं मिला है।

यहां मेरी एक्सएसएलटी फ़ाइल का एक संक्षिप्त संस्करण है:

<xsl:variable name="counter" select="1" as="xs:integer"/> <xsl:template match="/"> <xsl:for-each select="section"> <xsl:call-template name="section"></xsl:call-template> </xsl:for-each> </xsl:template> <xsl:template name="section"> <!-- Increment 'counter' here --> <span class="title" id="title-{$counter}"><xsl:value-of select="title"/></span> </xsl:template> 

कोई सुझाव कैसे यहां से जाना है?

Solutions Collecting From Web of "XSLT में मैं एक अलग चर से वैश्विक चर कैसे बढ़ाता हूं?"

दूसरों ने पहले ही समझाया है कि चर कैसे अपरिवर्तनीय हैं – कि XSLT में कोई असाइनमेंट बयान नहीं है (सामान्य तौर पर पूरी तरह कार्यात्मक प्रोग्रामिंग भाषाओं के साथ)

मेरे पास ऐसे समाधानों का एक विकल्प है जो अभी तक प्रस्तावित किया गया है। यह पैरामीटर से गुजर रहा है (जो एक्सएसएलटी में वर्बोज़ और बदसूरत है – यहां तक ​​कि मैं भी स्वीकार करता हूं)।

XPath में, आप मौजूदा <section> पहले <section> तत्वों की संख्या की गणना कर सकते हैं:

 <xsl:template name="section"> <span class="title" id="title-{1 + count(preceding-sibling::section)}"> <xsl:value-of select="title"/> </span> </xsl:template> 

(ध्यान दें: व्हाटस्पेस कोड स्वरूपण आपके परिणाम में प्रकट नहीं होगा, क्योंकि व्हाटस्पेस-केवल पाठ नोड्स स्टाइलशीट से स्वचालित रूप से छीन ली जाती हैं। इसलिए एक ही पंक्ति पर निर्देश देने के लिए मजबूर मत महसूस करें।)

इस दृष्टिकोण का एक बड़ा फायदा (जैसा कि position() का उपयोग करने का विरोध है position() यह है कि यह वर्तमान नोड पर निर्भर है, वर्तमान नोड सूची पर नहीं। यदि आपने अपनी प्रसंस्करण को किसी तरह बदल दिया है (जैसे, <xsl:for-each> केवल न केवल वर्गों पर संसाधित किया जाता है लेकिन कुछ अन्य तत्व भी), तो position() का मूल्य आपके <section> में <section> तत्वों की स्थिति के अनुरूप नहीं होगा दस्तावेज़। दूसरी ओर, यदि आप उपरोक्त के रूप में count() उपयोग करते हैं, तो यह प्रत्येक <section> तत्व की स्थिति के अनुरूप होगा यह दृष्टिकोण आपके कोड के अन्य भागों के साथ युग्मन को कम करता है, जो आमतौर पर बहुत अच्छी बात है

गिनती का एक विकल्प () <xsl:number> अनुदेश का उपयोग करना होगा इसका डिफ़ॉल्ट व्यवहार समान स्तर पर सभी समान-नामित तत्व होंगे, जो आपके लिए क्या चाहिए:

 <xsl:template name="section"> <xsl:variable name="count"> <xsl:number/> </xsl:variable> <span class="title" id="title-{$count}"> <xsl:value-of select="title"/> </span> </xsl:template> 

यह वर्बोसिटी में ट्रेड-ऑफ है (यदि आप अभी भी वैटिबल वैल्यू टेम्प्लेट कर्ली ब्रेसिज़ का उपयोग करना चाहते हैं, तो एक अतिरिक्त वैरिएबल घोषणा की आवश्यकता है), लेकिन केवल थोड़ा ही, क्योंकि यह आपके XPath एक्सप्रेशन को काफी सरल करता है।

सुधार के लिए अभी तक अधिक जगह है जबकि हमने वर्तमान नोड सूची पर निर्भरता को निकाल दिया है, फिर भी हम वर्तमान नोड पर निर्भर हैं। कि, में और खुद की, एक बुरी बात नहीं है, लेकिन यह टेम्पलेट को देखने से तुरंत स्पष्ट नहीं है जो वर्तमान नोड है। हम सभी जानते हैं कि टेम्पलेट का नाम " section " है; यह सुनिश्चित करने के लिए कि क्या संसाधित किया जा रहा है, हमें अपने कोड में कहीं और देखना होगा। लेकिन यह भी मामला नहीं है।

यदि आपको कभी भी <xsl:for-each> और <xsl:call-template> एक साथ (आपके उदाहरण के अनुसार) का उपयोग करने के लिए प्रेरित किया है, तो पीछे <xsl:apply-templates> और पता करें कि <xsl:apply-templates> का उपयोग कैसे करें

 <xsl:template match="/doc"> <xsl:apply-templates select="section"/> </xsl:template> <xsl:template match="section"> <xsl:variable name="count"> <xsl:number/> </xsl:variable> <span class="title" id="title-{$count}"> <xsl:value-of select="title"/> </span> </xsl:template> 

न केवल यह दृष्टिकोण कम वर्बोज़ ( <xsl:apply-templates/> दोनों <xsl:for-each> और <xsl:call-template/> ), लेकिन यह तुरंत स्पष्ट हो जाता है कि वर्तमान नोड क्या है आप को केवल match विशेषता को देखना है, और आप तुरन्त जानते हैं कि आप <section> तत्व की प्रक्रिया कर रहे हैं और वह <section> तत्व हैं जो आप की गिनती कर रहे हैं

कैसे टेम्पलेट नियमों (यानी <xsl:template> तत्व जो एक match विशेषता है) के एक संक्षिप्त विवरण के लिए, "कैसे XSLT वर्क्स" देखें

XSLT चर को बदला नहीं जा सकता। आप टेम्प्लेट से टेम्प्लेट के साथ मूल्य पास करेंगे।

यदि आप XSLT 2.0 का उपयोग कर रहे हैं, तो आप पैरामीटर प्राप्त कर सकते हैं और सही टेम्पलेट्स के लिए वेरिएबल का प्रचार करने के लिए सुरंग का उपयोग कर सकते हैं।

आपका टेम्पलेट ऐसा कुछ दिखाई देगा:

 <xsl:template match="a"> <xsl:param name="count" select="0"> <xsl:apply-templates> <xsl:with-param select="$count+1"/> </xsl:apply-templates> </xsl:template> 

अगर आप आईडी बनाना चाहते हैं तो जेनरेट-आईडी () का उपयोग करना देखें

XSLT के वेरिएबल अपरिवर्तनीय हैं, इसलिए आपको उस समस्या को ध्यान में रखना होगा। आप या तो position() उपयोग कर सकते हैं position() सीधे:

 <xsl:template match="/"> <xsl:for-each select="section"> <xsl:call-template name="section"/> </xsl:for-each> </xsl:template> <xsl:template name="section"> <span class="title" id="title-{position()}"><xsl:value-of select="title"/></span> </xsl:template> 

या अधिक टेम्पलेट केंद्रित तरीके से:

 <xsl:template match="/"> <xsl:apply-templates select="section"/> </xsl:template> <xsl:template match="section"> <span class="title" id="title-{position()}"><xsl:value-of select="title"/></span> </xsl:template> 

वेरिएबल स्थानीय रूप से स्कैड किए जाते हैं और केवल एक्सएसएलटी में पढ़ते हैं।

अपने XSLT प्रोसेसर पर निर्भर करते हुए, आप अपने XLST में स्क्रिप्टेड फ़ंक्शन पेश कर सकते हैं। उदाहरण के लिए, माइक्रोसॉफ्ट एक्सएमएल पुस्तकालय जावास्क्रिप्ट को शामिल करने का समर्थन करता है। एक उदाहरण के लिए http://msdn.microsoft.com/en-us/library/aa970889(VS.85).aspx देखें। यह रणनीति स्पष्ट रूप से काम नहीं करेगी यदि आप सार्वजनिक क्लाइंट ब्राउज़र पर एक्सएसएलटी को तैनात / निष्पादित करने की योजना बना रहे हैं; यह एक विशिष्ट XSLT प्रोसेसर द्वारा किया जाना चाहिए

आप अपनी इच्छानुसार कार्य करने के लिए स्थिति () फ़ंक्शन का उपयोग कर सकते हैं। यह ऐसा कुछ दिखाई देगा

 <xsl:template match="/"> <xsl:for-each select="section"> <xsl:call-template name="section"> <xsl:with-param name="counter" select="{position()}"/> </xsl:call-template> </xsl:for-each> </xsl:template> <xsl:template name="section"> <xsl:param name="counter"/> <span class="title" id="title-{$counter}"> <xsl:value-of select="title"/> </span> </xsl:template> 

यह स्वयं की कोशिश नहीं की, लेकिन आप कोशिश कर सकते हैं और टेम्प्लेट में एक पैरामीटर पास कर सकते हैं। आपके पहले टेम्प्लेट में आप प्रत्येक स्टेटमेंट के भीतर () (या वर्तमान () हो सकता है) गिनती करने के लिए पैरामीटर सेट करते हैं, और उसके बाद आपके "सेक्शन" टेम्पलेट को उस मान को पास करें।

टेम्प्लेट के लिए मापदंडों को पार करने के बारे में यहां अधिक है

<xsl:variable name="RowNum" select="count(./preceding-sibling::*)" /> और $ रोनेम को एक वृद्धिशील मान के रूप में चुनें।

उदाहरण: <xsl:template name="ME-homeTiles" match="Row[@Style='ME-homeTiles']" mode="itemstyle"> <xsl:variable name="RowNum" select="count(./preceding-sibling::*)" /> ...<a href="{$SafeLinkUrl}" class="tile{$RowNum}"><img ....></a>

इससे मूल्य टाइल 1, टाइल 2, टाइल 3 आदि के साथ लिंक के लिए कक्षाएं पैदा होंगी …