दिलचस्प पोस्ट
कैसे सी # में डेस्कटॉप पर प्रभावी ढंग से आकर्षित? आंशिक से एक रेजर सेक्शन पॉप्युलेट करें PHP / अपाचे / AJAX – पोस्ट सीमा? सफारी आईओएस 7 में एकाधिक चयन त्रुटि LNK2019: अनसुलझे बाहरी प्रतीक _WinMain @ 16 समारोह में संदर्भित ___tmainCRTS स्टार्टअप PHP DOMDocument त्रुटियों / चेतावनियां html5-tags पर PHP में यूआरएल पथ प्राप्त करें rdtsc के साथ गलत घड़ी चक्र माप कोणीय HTML बाइंडिंग SendKeys.Send और Windows कुंजी RegexOptions गणन का उपयोग किए बिना केस असंवेदनशील रेजेक्स कैसे vb.net में अपने शीर्ष लेख के साथ डेटाग्रिड दृश्य तालिका को मुद्रित करें? क्रॉस-साइट XMLHttpRequest jQuery के क्लिक ईवेंट मोबाइल ब्राउज़र में काम नहीं कर रहा है जेपीए का उपयोग कर अंतिम स्थायी इकाई का आईडी कैसे प्राप्त करें I

XSLT डिफ़ॉल्ट रूप से सभी पाठ क्यों करता है?

नमस्ते मैंने एक परिवर्तन किया था जो एक टैग को छोड़ देता है यदि यह शून्य है।

मैं यह जानना चाहता हूं कि क्या मेरा परिवर्तन ठीक काम कर रहा है, इसलिए इसे मैन्युअल रूप से जांचने के बजाय, मैंने एक और एक्सएसएलटी कोड लिखा था जो सिर्फ आउटपुट एक्सएमएल में उस विशिष्ट टैग की उपस्थिति की जांच करता है, यदि वह शून्य है, तो दूसरा एक्सएसएलटी को आउटपुट चाहिए पाठ "पाया" (मुझे वास्तव में कुछ XML प्रकार की आउटपुट की आवश्यकता नहीं है, लेकिन मैं बस खोज के लिए XSLT का उपयोग कर रहा हूं।)

जब मैंने इस एक्सएसएल कोड के साथ कोशिश की:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/SiebelMessage//SuppressCalendar[.!='']"> FOUND </xsl:template> </xsl:stylesheet> 

यह सभी पाठ डेटा को प्रदर्शित करता है जो XML फ़ाइल में मौजूद है,

इससे बचने के लिए, मुझे यह कोड लिखना पड़ा ::

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/SiebelMessage//SuppressCalendar[.!='']"> FOUND </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet> 

क्यों पूर्व कोड पाठ को आउटपुट करता है, मुझे एक्सएसएल को अन्य सभी पाठों की उपेक्षा करने का आग्रह क्यों करना चाहिए? यह है कि सभी XML पार्सर या केवल स्वयं का (मैं एमएसएक्सएमएल पार्सर का उपयोग कर रहा हूँ) का व्यवहार है

Solutions Collecting From Web of "XSLT डिफ़ॉल्ट रूप से सभी पाठ क्यों करता है?"

क्यों पूर्व कोड पाठ को आउटपुट करता है, मुझे एक्सएसएल को अन्य सभी पाठों की उपेक्षा करने का आग्रह क्यों करना चाहिए? यह है कि सभी XML पार्सर या केवल अपने स्वयं के ही व्यवहार

आप विशिष्ट मूलभूत XSLT विशेषताओं में से एक की खोज कर रहे हैं जैसा कि विनिर्देश में निर्दिष्ट है: XSLT के अंतर्निर्मित टेम्पलेट

युक्ति से :

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

 <xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template> 

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

 <xsl:template match="*|/" mode="m"> <xsl:apply-templates mode="m"/> </xsl:template> 

पाठ और विशेषता नोड्स के लिए एक अंतर्निर्मित टेम्पलेट नियम भी है जो टेक्स्ट के माध्यम से कॉपी करता है:

 <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template> 

प्रसंस्करण निर्देशों और टिप्पणियों के लिए निर्मित टेम्पलेट नियम कुछ भी नहीं करना है।

 <xsl:template match="processing-instruction()|comment()"/> 

नेमस्पेस नोड्स के लिए निर्मित टेम्पलेट नियम कुछ भी नहीं करना है। कोई नाम नहीं है जो एक नेमस्पेस नोड से मेल कर सकता है; इसलिए, अंतर्निहित टेम्पलेट नियम केवल एकमात्र टेम्पलेट नियम है जो नामस्थान नोड के लिए लागू किया गया है।

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

इसलिए, रिपोर्ट किए गए व्यवहार में अंतर्निहित टेम्पलेट के आवेदन का परिणाम है – इनमें से तीनों के 1 और 2 का।

यह एक अच्छा XSLT डिज़ाइन पैटर्न है जो अपने आप में निर्मित टेम्पलेट्स को ओवरराइड करता है, जो कि जब भी कहा जाता है तो एक त्रुटि संदेश जारी करेगा ताकि प्रोग्रामर को तुरंत पता चल जाए कि उसका रूपांतरण "लीक" है:

उदाहरण के लिए , यदि यह XML दस्तावेज़ है:

 <a> <b> <c>Don't want to see this</c> </b> </a> 

और यह इस परिवर्तन के साथ संसाधित है :

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="a|b"> <xsl:copy> <xsl:attribute name="name"> <xsl:value-of select="name()"/> </xsl:attribute> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet> 

परिणाम है :

 <a name="a"> <b name="b">Don't want to see this</b> </a> 

और प्रोग्रामर बहुत अजीब हो जाएगा कि अवांछित पाठ कैसे दिखाई दिया।

हालांकि, इस catch-all template जोड़ना, ऐसी किसी भ्रम से बचने और तुरंत त्रुटियों को पकड़ने में मदद करता है :

  <xsl:template match="*"> <xsl:message terminate="no"> WARNING: Unmatched element: <xsl:value-of select="name()"/> </xsl:message> <xsl:apply-templates/> </xsl:template> 

अब, भ्रमित उत्पादन के अलावा प्रोग्रामर को एक चेतावनी मिलती है जो समस्या को तुरंत बताती है :

  WARNING: Unmatched element: c 

एक्सएसएल में टेम्पलेट नियमों में कई तरह के निर्माण होते हैं, जिनमें से एक यह है:

 <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template> 

यह टेक्स्ट को आउटपुट करता है