/ / XSLT 1.0 और स्ट्रिंग काउंटिंग - xslt, xpath, xslt-1.0, सिम्फनी-सेमी

एक्सएसएलटी 1.0 और स्ट्रिंग गिनती - xslt, xpath, xslt-1.0, सिम्फनी-सीएमएस

तो मैं xslt में एक समस्या को हल करने की कोशिश कर रहा हूं, जिसे मैं सामान्य रूप से जानता हूं कि कैसे एक अनिवार्य भाषा में करना है। मैं xml तत्वों की सूची से एक तालिका में कोशिकाओं को जोड़ रहा हूं, मानक सामान। इसलिए:

<some-elements>
<element>"the"</element>
<element>"minds"</element>
<element>"of"</element>
<element>"Douglas"</element>
<element>"Hofstadter"</element>
<element>"and"</element>
<element>"Luciano"</element>
<element>"Berio"</element>
</some-elements>

हालाँकि, मैं एक पंक्ति में कटौती करना चाहता हूं और एक निश्चित चरित्र अधिकतम होने के बाद एक नई शुरुआत करना चाहता हूं। तो कहते हैं कि मैं प्रति पंक्ति 20 वर्णों की अनुमति देता हूं। मैं इसके साथ समाप्त होता हूं:

<table>
<tr>
<td>"the"</td>
<td>"minds"</td>
<td>"of"</td>
<td>"Douglas"</td>
</tr>
<tr>
<td>"Hofstadter"</td>
<td>"and"</td>
<td>"Luciano"</td>
</tr>
<tr>
<td>"Berio"</td>
</tr>
</table>

एक अनिवार्य भाषा में, मैं "को जोड़ना चाहता हूंतत्वों को एक पंक्ति में जोड़ते हुए प्रत्येक तत्वों को कुछ परिवर्तनशील चर के लिए स्ट्रिंग-गिनती में जोड़ते हैं। जब वह चर 20 से अधिक हो जाता है, तो मैं "एक नई पंक्ति का निर्माण करता हूं, और पूरी प्रक्रिया को फिर से शुरू कर देता हूं (रुके हुए तत्व पर शुरू होता है) उस पंक्ति पर स्ट्रिंग-काउंट को शून्य पर लौटने के बाद। हालांकि, मैं चर मानों को बदल नहीं सकता"। XSLT। यह संपूर्ण स्टेटलेस, फ़ंक्शन मूल्यांकन चीज़ मुझे एक लूप के लिए फेंक रही है।

उत्तर:

जवाब के लिए 9 № 1

Xsl-list से इस मंच पर आना 10 साल पीछे जाने जैसा है, क्यों हर कोई xslt 1 का उपयोग करता है :-)

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:template match="some-elements">
<table>
<xsl:apply-templates select="element[1]"/>
</table>
</xsl:template>


<xsl:template match="element">
<xsl:param name="row"/>
<xsl:choose>
<xsl:when test="(string-length($row)+string-length(.))>20
or
not(following-sibling::element[1])">
<tr>
<xsl:copy-of select="$row"/>
<xsl:copy-of select="."/>
</tr>
<xsl:apply-templates select="following-sibling::element[1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="following-sibling::element[1]">
<xsl:with-param name="row">
<xsl:copy-of select="$row"/>
<xsl:copy-of select="."/>
</xsl:with-param>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>