टेम्पलेट को एक नाम और एक मोड देने के लिए बहुत सार्थक नहीं है।
name
विशेषता पूरी तरह से टेम्पलेट की पहचान करती है और एक ही नाम और विभिन्न मोड के साथ दो टेम्पलेट्स नहीं हो सकते हैं।
mode
विशेषता विभिन्न मोड का उपयोग करके एक ही नोड्स को एक से अधिक संसाधित करने की अनुमति देती है।
<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="num[position() mod 3 = 1]">
<tr>
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
</tr>
</xsl:template>
<xsl:template match="*" mode="copy">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="num"/>
</xsl:stylesheet>
इस बदलाव निम्नलिखित XML दस्तावेज़ पर लागू किया जाता है:
यहाँ एक छोटी उदाहरण है
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
नतीजा यह है कि है संख्या तीन tr
(में प्रदर्शित किए जाते हैं पंक्तियां), प्रत्येक में तीन कॉलम (अंतिम पंक्ति के संभावित अपवाद के साथ):
<tr>
<td>01</td>
<td>02</td>
<td>03</td>
</tr>
<tr>
<td>04</td>
<td>05</td>
<td>06</td>
</tr>
<tr>
<td>07</td>
<td>08</td>
<td>09</td>
</tr>
<tr>
<td>10</td>
</tr>
इस बदलाव में, उस रूप 3*k +1
(जहां k
एक पूर्णांक है) में नहीं दर्शाया जा सकता स्थिति के साथ किसी भी num
तत्व, खाली शरीर के साथ एक टेम्पलेट के अनुरूप है और इस तरह संसाधित नहीं है।
हालांकि, हम सभी num
तत्वों को संसाधित करना चाहते हैं जो पंक्ति की कोशिकाओं को बनाना चाहिए।
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
जिसका अर्थ है: "चयनित नोड्स टेम्पलेट्स कि सामान्य रूप से लागू किया जाएगा (कोई मोड में) के लिए लागू नहीं है, लेकिन लागू टेम्पलेट्स कि copy
में हैं इस purpuse लिए, हम उन्हें xslt अनुदेश का उपयोग कर कार्रवाई कर रहे हैं मोड "
इस प्रकार, हम चयनित num
तत्वों की अनदेखी नहीं है, लेकिन उन्हें copy
मोड में कार्रवाई कर रहे हैं और एक पंक्ति के td
रों बना रहे हैं।
टेम्पलेट नियम:
<xsl:template match="num"/>
xslt builtin टेम्पलेट्स (डिफ़ॉल्ट प्रोसेसिंग) है कि अन्यथा num
नोड्स जिसका स्थिति 3*k +1
के रूप में प्रतिनिधित्व नहीं किया जा सकता की स्ट्रिंग मूल्यों का कारण होगा ओवरराइड करने के लिए, उत्पादन होने के लिए आवश्यक है।
तो, इन नोड्स दोनों टेम्पलेट्स द्वारा कार्रवाई की जाती है:
<xsl:template match="num"/>
और
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
है और इस तरह हम चाहते थे परिणाम मिलता है।
यह देखने के लिए कि इन टेम्पलेट्स को कैसे लागू किया जाता है, यह एक अच्छा XSLT डीबगर के साथ कदम उठाने के लिए निर्देशक होगा।
@ajreal। – Venkat
अच्छा सवाल, +1। स्पष्टीकरण के लिए और एक पूर्ण कोड उदाहरण के लिए मेरा जवाब देखें। –