2009-04-10 8 views
6

मैं समय-समय पर सुनता हूं कि आपको प्रत्येक के लिए एक्सएसएलटी के उपयोग से कैसे बचना चाहिए। यह आपका आंतरिक अनिवार्य प्रोग्रामिंग राक्षस है जिसे निर्वासित किया जाना चाहिए।xsl के बारे में इतना बुरा क्या है: प्रत्येक के लिए?

इसके बारे में इतना बुरा क्या है?

क्या यह सर्वोत्तम अभ्यास आकार एक्सएमएल (i.e 100 बनाम 10,000 नोड्स) के आधार पर महत्वपूर्ण है?

उत्तर

6

<xsl:apply-templates> और <xsl:-for-each> के बीच आवश्यक अंतर यह है कि कोई भी बाहर बताया गया है:

xsl:apply-templates है:

  1. <xsl:apply-templates> वास्तव में एक अच्छे, <xsl:for-each> की अधिक सुरुचिपूर्ण बराबर की तुलना में अधिक कुछ है xsl:for-each से भी अधिक समृद्ध और गहरा, यहां तक ​​कि बस क्योंकि हम नहीं जानते कि के नोड्स पर कौन सा कोड लागू किया जाएगा - सामान्य मामले में यह कोड नोड-सूची के विभिन्न नोड्स के लिए अलग होगा।

    इसके अलावा, कोड कि लागू किया जाएगा XSL के बाद जिस तरह से लिखा जा सकता है: लागू टेम्पलेट्स लिखा गया था और लोगों द्वारा मूल लेखक नहीं पता है कि।


    _2। दूसरी ओर, <xsl:for-each> का उपयोग करके किसी भी तरह हानिकारक नहीं है अगर कोई जानता है कि <xsl:for-each> को संसाधित किया गया है।

    समस्या यह है कि एक्सएसएलटी के लिए बहुत से नए लोग जो अनिवार्य प्रोग्रामिंग में अनुभव रखते हैं, उनके पसंदीदा पीएल में "लूप" के विकल्प के रूप में <xsl:for-each> लेते हैं और सोचते हैं कि यह उन्हें असंभव प्रदर्शन करने की अनुमति देता है - जैसे काउंटर बढ़ाने या पहले से परिभाषित <xsl:variable> के किसी भी अन्य संशोधन।

    <xsl:for-each> का एक अनिवार्य उपयोग वर्तमान दस्तावेज़ को बदलना है - उदाहरण के लिए अक्सर in order to be able to use the key() function on a document, different from the current source XML document की आवश्यकता होती है, उदाहरण के लिए लुकअप-टेबल को कुशलता से एक्सेस करने के लिए जो अपने स्वयं के XML दस्तावेज़ में रहता है।

2

त्वरित उत्तर: एक्सएसएलटी प्रकृति में काफी हद तक कार्यात्मक है, और अनिवार्य लूप बहुत कार्यात्मक नहीं हैं।

सामान्य में XSLT का सर्वश्रेष्ठ परिणाम प्राप्त करने के लिए आधारित रास्ता पैटर्न जितना संभव हो उतना मिलान का उपयोग करें (xsl:apply-template बजाय छोरों, आईएफएस और कॉल-टेम्पलेट) है।

अंत में, यह शैली के बारे में है, और एक्सएसएलटी के छोटे टुकड़ों में थोड़ा अंतर आएगा, लेकिन अधिक कार्यात्मक होने से लंबी/जटिल समस्याओं में मदद मिलेगी।

आउटपुट को संशोधित करने के बजाय मूल्यों को वापस करने वाले कार्यों को बनाने के अलावा।

+0

में "अनिवार्य" कुछ भी नहीं है। इसके अलावा, "उपयोग-टेम्पलेट" से आपका क्या मतलब है? एक्सएसएलटी में ऐसा कोई निर्देश नहीं है। –

+0

एस/उपयोग-टेम्पलेट/कॉल-टेम्पलेट /: टाइपो – Richard

+0

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

1

apply-templates का उपयोग करके, शायद mode के साथ, उस स्थान पर रुचि के अधिक प्रकार के तत्वों के उचित परिवर्तन शामिल करना आसान बनाता है।

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

5

टेम्पलेट्स कोड को और अधिक अच्छी तरह से विभाजित करते हैं। इसके अलावा, प्रत्येक लूप इस तथ्य से पीड़ित हैं कि लोग अक्सर इस विचार के साथ आते हैं कि वे प्रमुख प्रोग्रामिंग भाषाओं में लूप के काम के समान तरीके से काम करते हैं।

2

यह for-each का उपयोग है जो निराश होने वाले टेम्पलेट्स को कॉल करने के लिए है, न कि for-each, का व्यापक उपयोग नहीं। Muenchian method of grouping पर xsl:for-each लूप के साथ भी निर्भर करता है।

अच्छा एक्सएसएलटी लिखने का विचार यह है कि आपके एक्सएमएल की संरचना को यह निर्धारित करना चाहिए कि कौन से टेम्पलेट्स मेल खाते हैं और फिर लागू होते हैं। इसलिए, जब भी संभव हो, for-each का उपयोग करके चयन लागू करने के बजाय, नोड्स का चयन करने के लिए apply-templates का उपयोग करें।

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