2009-07-01 10 views
12

मैं एक एक्सएसएलटी रूपांतरण लिख रहा हूं जिसमें मैं रेप्लेस मैच और प्रतिस्थापन करने के लिए प्रतिस्थापन फ़ंक्शन का उपयोग करना चाहता हूं।एक्सएसएलटी प्रतिस्थापन समारोह नहीं मिला

हालांकि, विजुअल स्टूडियो 2008 की रिपोर्ट है कि

'की जगह ले()' एक अज्ञात XSLT कार्य है।

कोड के ही सा है:

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
      <xsl:variable name="FeatureInfo" select="Text" /> 
       <xsl:value-of select="replace($FeatureInfo,'Feature=','TESTING')"/> 
    </td> 
</xsl:otherwise> 

कुछ ऐसा है जिसे मैं गलत कर रहा हूँ है?

धन्यवाद :)

संपादित करें: मैं XSLT के इस संस्करण का उपयोग कर रहा है, लेकिन ऐसा लगता है कि यह दृश्य स्टूडियो के संस्करण है कि एक समस्या है ... मैं एक समाधान खोजने की कोशिश करनी होगी।

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

उत्तर

30

replace फ़ंक्शन केवल एक्सएसएलटी संस्करण 2.0 में उपलब्ध है, संस्करण 1.में नहीं। सिर्फ इसलिए कि आपने version="2.0" निर्दिष्ट किया है इसका मतलब यह नहीं है कि विजुअल स्टूडियो इसका समर्थन करता है।

Here's a template on codesling that implements string-replace in XSLT 1.0। आप इसका उपयोग करने में सक्षम होना चाहिए लेकिन मैं इसकी दक्षता के लिए प्रतिबद्ध नहीं हो सकता।

(ऊपर के लिंक से लिया)

<xsl:template name="string-replace-all"> 
    <xsl:param name="text"/> 
    <xsl:param name="replace"/> 
    <xsl:param name="by"/> 
    <xsl:choose> 
    <xsl:when test="contains($text,$replace)"> 
     <xsl:value-of select="substring-before($text,$replace)"/> 
     <xsl:value-of select="$by"/> 
     <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="substring-after($text,$replace)"/> 
     <xsl:with-param name="replace" select="$replace"/> 
     <xsl:with-param name="by" select="$by"/> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

आप इस तरह इसे कहते हैं: जहाँ तक मुझे पता के रूप में

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
    <xsl:variable name="FeatureInfo" select="Text" /> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="$FeatureInfo"/> 
     <xsl:with-param name="replace" select="Feature="/> 
     <xsl:with-param name="by" select="TESTING"/> 
    </xsl:call-template> 
    </td> 
</xsl:otherwise> 
+3

आपको अपने s, जैसे select = "'testing'" में एकल उद्धरण की आवश्यकता है। –

9

प्रतिस्थापन XSLT 1.0 में मान्य नहीं है। आपके पास "अनुवाद()" है, जो आपके लिए काम कर सकता है, लेकिन प्रतिस्थापित करें() एक्सएसएलटी 2 है, और एमएस .NET एक्सएमएल कोडबेस का हिस्सा नहीं है। हालांकि आप इसे किसी तीसरे पक्ष के एक्सएमएल पुस्तकालयों के साथ प्राप्त कर सकते हैं।

+1

वास्तव में जो मैं अपनी परियोजना के लिए खोज रहा था। धन्यवाद! –

+0

बिल्कुल सही, धन्यवाद आदमी: डी – codemania23

-1

, replace() XLST 2.0 में प्रस्तुत किया गया था। आपके दस्तावेज़ की संस्करण परिभाषा क्या है? शायद आपको एक्सएलएसटी 2.0 (यदि संभव हो) का उपयोग करने के लिए वीएस 2008 सेट करना होगा।

0

आप फ़ीचर रखा जाना चाहिए था = उद्धरण के बीच स्ट्रिंग सरल स्ट्रिंग प्रतिस्थापन के लिए इस प्रकार

<xsl:otherwise><td style="border: solid 1px black; background-color:#00CC66;"> <xsl:variable name="FeatureInfo" select="Text" /> <xsl:call-template name="string-replace-all">  <xsl:with-param name="text" select="$FeatureInfo"/>  <xsl:with-param name="replace" select="'Feature='"/>  <xsl:with-param name="by" select="TESTING"/> </xsl:call-template> </td></xsl:otherwise> 

Thanks 
4

का अनुवाद समारोह (xslt 1.0 में उपलब्ध है) मेरे लिए ठीक काम किया है।

मैंने इसे संख्यात्मक मानों के लिए रिक्त स्थान निकालने के लिए उपयोग किया।

+0

अनुवाद फ़ंक्शन केवल एकल वर्णों पर काम करता है। – JLRishe

4

प्रतिस्थापन करने के लिए सी # स्क्रिप्ट एम्बेड करने के बारे में कैसे?

अपने स्टाइलशीट के तल के लिए निम्न जोड़ें:

<msxsl:script language="C#" implements-prefix="scr"> <![CDATA[ public string Replace(string stringToModify, string pattern, string replacement) { return stringToModify.Replace(pattern, replacement); } ]]> </msxsl:script>

स्टाइलशीट तत्व करने के लिए एक नाम स्थान विशेषता जोड़ें:

xmlns:scr="urn:scr.this"

तब के रूप में लागू ....

<xsl:value-of select="scr:Replace(description/text(), 'ABC', '123')"/> 
संबंधित मुद्दे