2009-10-14 11 views
7

यह मेरी पहली बार एक्सएसएलटी का उपयोग कर रहा है। मैं एक ऐसी फाइल बनाने की कोशिश कर रहा हूं जो एक प्रोग्राम से निर्यात की गई एक्सएमएल डेटा फ़ाइल को एक HTML रिपोर्ट में उपयोग करेगा।क्या एक्सएसएलटी पाठ की एक स्ट्रिंग पार्स कर सकता है?

तत्व का मान में से एक एक छवि फ़ाइल के लिए पथ है, लेकिन पथ उत्पन्न

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg 

के रूप में इस तरह के एक निरपेक्ष पथ है, लेकिन मैं सिर्फ फ़ाइल नाम के एक रिश्तेदार पथ चाहते हैं।

क्या फ़ाइल नाम को पार्स करने के लिए एक्सएलएसटी फ़ाइल के माध्यम से कोई रास्ता है?

उत्तर

12

XPath में substring-after फ़ंक्शन शामिल है जो पहले किसी अन्य स्ट्रिंग की घटना के बाद स्ट्रिंग देता है। यह अपने आप में पर्याप्त नहीं है, लेकिन एक टेम्पलेट निम्नलिखित जैसे यह कर सकता है:

<xsl:template name="filename-only"> 
    <xsl:param name="path" /> 
    <xsl:choose> 
     <xsl:when test="contains($path, '\')"> 
      <xsl:call-template name="filename-only"> 
       <xsl:with-param name="path" select="substring-after($path, '\')" /> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$path" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

उपलब्ध स्ट्रिंग कार्यों का सेट बहुत व्यापक नहीं है, लेकिन मैंने पाया है कि यह सबसे अनुप्रयोगों के लिए काफी अच्छा है कि आपको एक्सएसएलटी में आवश्यकता होगी।

0

एक्सपीएलटी XPath 2.0 की मदद से और इसके विभिन्न string functions इस प्रकार की चीज़ों से निपटने में मदद करता है।

उदाहरण:
प्रश्न में आपका उल्लेख [जेपीजी फाइल करने के लिए] पथ मान लिया जाये कि एक xml से आता है झलकी

... 
<For_HTML> 
    <Image1> 
     <Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path> 
     <Description>Photo of the parking lot</Description> 
     <Width>123</Width> 
     ... 
    </Image1> 
</For_HTML> 

XSLT टुकड़ा के लिए इसी तरह की तरह

<xsl:template match='//For_HTML/Image1'> 
    <img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}' 
      alt='{./Description}' 
      width=' .... you got the idea' 
    /> 
</xsl:template> 

नोट कुछ ऐसा दिखाई देगा: didn ' परीक्षण करने के लिए समय नहीं है; लेकिन यह सही दिखता है।

+0

आप टेम्पलेट फ़ाइल विशेषताओं के अंदर एक्सएसएलटी टैग नहीं डाल सकते हैं। इसके बजाए '{...}' का प्रयोग करें। –

+0

@ ग्रेग मैन, तुम अच्छे हो! हमें सभी ईमानदार रखते हुए ;-) और हमें 'शिक्षण'। धन्यवाद। फिक्स्ड और परीक्षण! – mjv

2

यह प्रश्न के दायरे से थोड़ा सा है, लेकिन एक्सएसएलटी 2 का उपयोग करने पर Michael Kay has an excellent paper एक्सएमएल में शुद्ध पाठ को पार्स करने के लिए।

2

हां, a general LR(1) parser implemented in XSLT 2.0. देखें (केवल 245 लाइनों में)।

मैंने इसे a parser for JSON और XPath 2.0 के लिए एक पार्सर के साथ कार्यान्वित किया है - पूरी तरह से एक्सएसएलटी में।

0

यह संभव है। मैंने निम्नलिखित स्क्रिप्ट विकसित की है: http://barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/

+1

क्या आप शायद अपनी स्क्रिप्ट के बारे में कुछ विवरण दे सकते हैं? केवल लिंक लिंक आमतौर पर उपयोगी नहीं होते हैं, क्योंकि कुछ लिंक कुछ समय बाद मर जाते हैं। – Bernhard

+0

कृपया अपना उत्तर स्पष्ट करें – Stephan

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