আমি জানি এই প্রশ্নটি পুরানো, তবে সমস্ত উত্তরের মধ্যে, আমি এক্সএসএলটি বিকাশের ক্ষেত্রে এই ব্যবহারের ক্ষেত্রে একটি সাধারণ পদ্ধতির একটি মিস করছি।
আমি ধারণা করছি যে অপিটি থেকে অনুপস্থিত কোডটি এরকম কিছু দেখাচ্ছে:
<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স্টাইল কনস্ট্রাক্টস ব্যবহার করে বা অন্য কথায়, জরুরীভাবে এই সমস্ত ক্ষেত্রে মোকাবেলা করার জন্য দ্রুত অগোছালো হয়ে উঠছে (আরও বেশি কিছু যদি উপাদানগুলি বিভিন্ন স্তরে হতে পারে!)। এক্সএসএলটি-র একটি সাধারণ প্রোগ্রামিং আইডিয়ামটি টেম্পলেটগুলি ব্যবহার করছে (অতএব টিএস ইন এক্সএসএলটি), যা ঘোষিত প্রোগ্রামিং, অত্যাবশ্যক নয় (আপনি প্রসেসরের কী করতে হবে তা বলবেন না, কিছু শর্ত পূরণ হলে আপনি কী আউটপুট চান তা কেবল বলুন)। এই ব্যবহারের ক্ষেত্রে এটি নীচের মতো কিছু দেখতে পারে:
<!-- 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>
এটি (যে কোনও এক্সএসএলটি সংস্করণ সহ) কাজ করে, কারণ উপরের প্রথমটির উচ্চতর অগ্রাধিকার রয়েছে (এটির একটি প্রিডিকেট রয়েছে)। "ফল-থ্রু" মেলানো টেম্পলেট, দ্বিতীয়টি, বৈধ নয় এমন কোনও জিনিসকে ধরে। তৃতীয়টি তারপরে আউটপুট দেওয়ার যত্ন নেয়categoryName সঠিকভাবে মান
নোট এই দৃশ্যকল্প মধ্যে কোন প্রয়োজন থেকে specifially মেলে নেই categoriesবা category, কারণ প্রসেসর স্বয়ংক্রিয়ভাবে সব শিশুদের প্রক্রিয়া হবে, যদি না আমরা তা অন্যথায় বলবেন না (এই উদাহরণে, দ্বিতীয় ও তৃতীয় টেমপ্লেট আরও না প্রক্রিয়া শিশু না, কারণ সেখানে xsl:apply-templatesএ তাদের)।
এই দৃষ্টিভঙ্গিটি আরও সহজেই প্রসারণযোগ্য হ'ল অত্যাবশ্যক পদ্ধতির, কারণ এটি স্বয়ংক্রিয়ভাবে একাধিক বিভাগগুলির সাথে সম্পর্কিত এবং এটি অন্য উপাদান বা ব্যতিক্রমগুলির জন্য কেবল অন্য একটি ম্যাচিংয়ের টেম্পলেট যুক্ত করে বাড়ানো যেতে পারে। যদি-শাখা ছাড়া প্রোগ্রামিং ।
দ্রষ্টব্য: nullএক্সএমএল তেমন কোনও জিনিস নেই । নেই xsi: শূন্য , কিন্তু যে খুব কমই কিছু সাজানোর একটি স্কিমা ছাড়া ব্যবহার করা হয় untyped পরিস্থিতিতে বিশেষ করে খুব কমই।