XSLT कार्यात्मक प्रोग्रामिंग के लिए FXSL (खुला स्रोत पुस्तकालय का उपयोग करना, XSL में पूरी तरह से लिखा टी) एक बस लिखते:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="trim.xsl"/>
<xsl:output method="text"/>
<xsl:template match="/*/description">
'<xsl:call-template name="trim">
<xsl:with-param name="pStr" select="."/>
</xsl:call-template>'
</xsl:template>
</xsl:stylesheet>
जब इस बदलाव प्रदान की XML दस्तावेज़ पर भी लागू होता है:
<car>
<description> To get more information look at: www.example.com </description>
</car>
चाहता था, सही परिणाम का उत्पादन किया है:
'To get more information look at: www.example.com'
trim
टेम्पलेट कैसे काम करता है?
यह बाएं अग्रणी व्हाइटस्पेस को ट्रिम करता है, फिर यह परिणामी स्ट्रिंग को उलट देता है और इसके अग्रणी व्हाइटस्पेस को ट्रिम करता है, फिर अंततः परिणामी स्ट्रिंग को उलट देता है।
II। XPath 2.0 समाधान:
उपयोग: - 2.0 -
replace(replace(/*/description, '^\s*(.+?)\s*$', '$1'), '^ .*$', '')
यहाँ एक XSLT है आधारित सत्यापन:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
"<xsl:sequence
select="replace(replace(/*/description, '^\s*(.+?)\s*$', '$1'), '^ .*$', '')"/>"
</xsl:template>
</xsl:stylesheet>
जब इस बदलाव प्रदान की XML दस्तावेज़ पर लागू किया जाता है (ऊपर), XPath अभिव्यक्ति का मूल्यांकन किया जाता है और इस मूल्यांकन का परिणाम आउटपुट में कॉपी किया जाता है:
"To get more information look at: www.example.com"
मुझे अतिरिक्त पुस्तकालयों को जोड़ने के साफ समाधान पसंद हैं - इस के लिए धन्यवाद! चूंकि मुझे पहले प्रोजेक्ट मैनेजर से पूछना होगा, चाहे हम अतिरिक्त पुस्तकालय जोड़ सकें, यह समाधान मेरे लिए स्पष्ट रूप से बेहतर है। मुझे लगता है कि xsl-file की शुरुआत में एक पैरामीटर डालने का कोई तरीका नहीं है ताकि सभी फ़ील्ड छंटनी हो सकें, है ना? मुझे '' मिला, लेकिन यह केवल 'concat (...)' जैसे अन्य परिवर्तनों के बाद लागू होता है, जिसके परिणामस्वरूप 'अंतिम नाम, प्रथम नाम' के बजाय 'अंतिम नाम, प्रथम नाम' जैसे परिणाम होते हैं। ऐसा लगता है कि ऐसा कोई आसान समाधान नहीं है ... –
@MathiasBader: 'xsl: स्ट्रिप-स्पेस 'किसी भी रूपांतरण से पहले, स्रोत दस्तावेज़ पर काम करता है, और टेक्स्ट नोड्स को हटा देता है जिसमें केवल व्हाइटस्पेस होता है। यह शायद आपकी समस्या का समाधान नहीं करेगा। सबसे आसान समाधान शायद एक अलग परिवर्तन बनाने के लिए होगा जो केवल चयनित तत्वों की सफेद जगहों को ट्रिम्स करेगा, और दूसरे रूपांतरण के लिए इनपुट के रूप में इसके परिणाम का उपयोग करेगा। यह एक विशिष्ट प्रोसेसर के लिए एक्सटेंशन फ़ंक्शंस का उपयोग करके, या ट्रांसफॉर्मेशन का आह्वान करने के लिए बाहरी टूल/एपीआई का उपयोग करके एकल स्टाइलशीट में किया जा सकता है। –
बाहरी उपकरण द्वारा एक अलग (पूर्व-) परिवर्तन का उपयोग करना कुछ ऐसा था जो मुझे भी दिमाग में था। मैंने सोचा कि समस्या सामान्य है, मैंने सोचा कि एक्सएसएलटी द्वारा प्रदान किया गया एक आसान समाधान होना चाहिए जो मुझे अभी तक नहीं मिला है। –