2011-12-06 15 views
5

मुझे स्ट्रिंग 'abcdef' को इसके हिस्सों, 'ए', 'बी', 'सी', 'डी', 'ई', 'एफ' में कनवर्ट करने की आवश्यकता है। बेवकूफ मैंने टोकननाइजेशन ('abcdef', '') लेकिन निश्चित रूप से जो एक FORX0003 त्रुटि देता है (टोकननाइज़() में नियमित अभिव्यक्ति शून्य-लंबाई स्ट्रिंग से मेल नहीं खाती है)।एक्सएसएलटी में क्या मैं कुछ भी नहीं कर सकता?

मैं वास्तव में स्ट्रिंग को अंततः 'ए/बी/सी/डी/ई/एफ' में बदलने की कोशिश कर रहा हूं, इसलिए कोई भी शॉर्टकट जो मुझे सीधे इस स्थिति में लाएगा, भी उपयोगी होगा।

(मैं सैक्सन 9.3 का उपयोग कर रहा नेट मंच के लिए)

उत्तर

2

इस लाइन का उपयोग करें:

replace(replace($input, "(.)", "$1/", "s"), "(.*).$", "$1", "s") 

कहाँ अपने मूल स्ट्रिंग पर $input अंक। इस लाइन की वापसी आपकी वांछित स्ट्रिंग है।

a/b/c/d/e/f 
5

एक स्ट्रिंग $str से वांछित चरित्र अनुक्रम प्राप्त करने के लिए कार्य करता है string-to-code-points() की जोड़ी और codepoints-to-string() का उपयोग करें:

for $c in string-to-codepoints($str) 
return 
    codepoints-to-string($c) 

प्राप्त करने के लिए यह वर्ण अनुक्रम '/' के साथ जुड़ने के रूप में शामिल हो गया है, उपर्युक्त अभिव्यक्ति पर बस string-join() लागू करें।

A/B/C 

स्पष्टीकरण:

string-to-codepoints($str) के अनुक्रम का उत्पादन

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:sequence select= 
     "string-join(
       for $c in string-to-codepoints('ABC') 
       return 
       codepoints-to-string($c), 
      '/' 
        ) 
     "/> 
</xsl:template> 
</xsl:stylesheet> 

वांछित चरित्र अनुक्रम पैदा करता है:

यहाँ एक पूर्ण कोड उदाहरण है कोड-पॉइंट्स (उन्हें "चरित्र कोड" के रूप में सोचें) स्ट्रिंग के प्रत्येक वर्ण का प्रतिनिधित्व करते हैं।

उदाहरण के लिए;

65 66 67 

codepoints-to-string($code-seq) 

string-to-codepoints() का प्रतिलोम समारोह है:

string-to-codepoints('ABC') 

अनुक्रम पैदा करता है। कोडपॉइंट्स के अनुक्रम को देखते हुए, यह स्ट्रिंग का उत्पादन करता है, जिनके पात्र अनुक्रम में कोडपॉइंट्स द्वारा दर्शाए जाते हैं। इस प्रकार:

ABC 

इसलिए:

for $c in string-to-codepoints($str) 
return 
    codepoints-to-string($c) 

$str में प्रत्येक व्यक्ति के चरित्र का कोडपॉइंट हो जाता है और एक अलग स्ट्रिंग में बदल देता है

codepoints-to-string((65,66,67)) 

स्ट्रिंग पैदा करता है।

string-join() का उपयोग करके हम प्रदान किए गए शामिल-चरित्र "/" का उपयोग करके ऐसे सभी अलग-अलग तारों में शामिल हो जाते हैं।

+0

यह समाधान पूरी तरह से काम करता है, लेकिन मैं FailedDev का जवाब स्वीकार कर लिया है के रूप में यह छोटा और (सरल) लोग (मेरे जैसे) –

+0

@TheArtfulBenny को समझने के लिए थोड़ा आसान है: आसान समझने के लिए ??? आप मजाक कर रहे है। –

संबंधित मुद्दे