मुझे पता है कि यह प्रश्न पुराना है, लेकिन सभी उत्तरों के बीच, मुझे एक याद आती है जो कि XSLT विकास में इस उपयोग-मामले के लिए एक सामान्य दृष्टिकोण है।
मैं कल्पना कर रहा हूं कि ओपी से लापता कोड कुछ इस तरह दिखता है:
<xsl:template match="category">
<xsl:choose>
<xsl:when test="categoryName !=null">
<xsl:value-of select="categoryName " />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="other" />
</xsl:otherwise>
</xsl:choose>
</category>
और यह इनपुट कुछ इस तरह दिखता है:
<categories>
<category>
<categoryName>Books</categoryName>
</category>
<category>
<categoryName>Magazines</categoryName>
<categoryName>Periodicals</categoryName>
<categoryName>Journals</categoryName>
</category>
<category>
<categoryName><!-- please fill in category --></categoryName>
</category>
<category>
<categoryName />
</category>
<category />
</categories>
यानी, मेरा मानना है कि शून्य, खाली, एकल या कई categoryName
तत्व हो सकते हैं। इन सभी मामलों से निपटने के लिए xsl:choose
-स्टाइल कंस्ट्रक्शंस का उपयोग करना , या दूसरे शब्दों में, अनिवार्य रूप से, जल्दी से गड़बड़ हो रहा है (और भी अधिक अगर तत्व विभिन्न स्तरों पर हो सकते हैं!)। XSLT में एक विशिष्ट प्रोग्रामिंग मुहावरा टेम्पलेट्स का उपयोग कर रहा है (इसलिए टी इन XSLT), जो कि घोषणात्मक प्रोग्रामिंग है, न कि अत्यावश्यक (आप प्रोसेसर को यह नहीं बताएं कि आपको क्या करना है, आप बस यह बताएं कि कुछ शर्तों को पूरा करने पर आप आउटपुट क्या चाहते हैं)। इस उपयोग-मामले के लिए, जो निम्नलिखित की तरह कुछ देख सकता है:
<!-- positive test, any category with a valid categoryName -->
<xsl:template match="category[categoryName[text()]]">
<xsl:apply-templates />
</xsl:template>
<!-- any other category (without categoryName, "null", with comments etc) -->
<xsl:template match="category">
<xsl:text>Category: Other</xsl:text>
</xsl:template>
<!-- matching the categoryName itself for easy handling of multiple names -->
<xsl:template match="categoryName">
<xsl:text>Category: </xsl:text>
<xsl:value-of select="." />
</xsl:template>
यह काम करता है (किसी भी XSLT संस्करण के साथ), क्योंकि ऊपर दिए गए पहले वाले में एक उच्च वरीयता है (इसमें एक विधेय है)। "फ़ॉल-थ्रू" मिलान टेम्पलेट, दूसरा वाला, कुछ भी पकड़ता है जो मान्य नहीं है। तीसरा तब आउटपुट का ख्याल रखता हैcategoryName
उचित तरीके मूल्य ।
ध्यान दें कि इस परिदृश्य में विशिष्ट रूप से मिलान करने की आवश्यकता नहीं है categories
या category
, क्योंकि प्रोसेसर स्वचालित रूप से सभी बच्चों को संसाधित करेगा, जब तक कि हम इसे अन्यथा नहीं बताएं (इस उदाहरण में, दूसरा और तीसरा टेम्पलेट आगे बच्चों को संसाधित नहीं करते हैं, क्योंकि इसमें कोई भी नहीं xsl:apply-templates
है) उन्हें)।
यह दृष्टिकोण अधिक आसानी से विस्तार योग्य है, फिर अनिवार्य दृष्टिकोण, क्योंकि यह स्वचालित रूप से कई श्रेणियों से संबंधित है और इसे अन्य तत्वों या अपवादों के लिए केवल एक अन्य मिलान टेम्पलेट जोड़कर विस्तारित किया जा सकता है। यदि शाखाओं के बिना प्रोग्रामिंग ।
नोट: null
XML जैसी कोई चीज नहीं है । इसमें xsi: nil है , लेकिन इसका उपयोग शायद ही कभी किया जाता है, खासकर किसी प्रकार के स्कीमा के बिना अनछुए परिदृश्यों में शायद ही कभी।