2011-06-08 12 views
7

चयन करने की आवश्यकता मैं ऐसा करने की जरूरत:xslt एक भी बोली

<xsl:with-param name="callme" select="'validateInput(this,'an');'"/> 

मैं Escape single quote in xslt concat function पढ़ा है और यह मेरे को बदलने के लिए '&apos; साथ मुझे लगता है कि अभी तक इसकी अभी भी काम नहीं ..

किया है बताता है

किसी को भी हम इस ?:

<xsl:with-param name="callme" select="'validateInput(this,&apos;an&apos;);'"/> 
+0

अच्छा सवाल है, +1। एक उपयोगी तकनीक के लिए मेरा उत्तर देखें जो आसानी से किसी विशेष वर्ण को स्ट्रिंग में मिश्रित करने की अनुमति देता है। –

उत्तर

9

कुछ सरल है कि में इस्तेमाल किया जा सकता एक्सएसएलटी का कोई संस्करण:

<xsl:variable name="vApos">'</xsl:variable> 

मैं अक्सर एक बोली निर्दिष्ट करने के लिए उसी तकनीक का उपयोग कर रहा हूँ:

concat('This movie is named ', $vQ, 'Father', $vApos, 's secrets', $vQ) 

तो:

<xsl:variable name="vQ">"</xsl:variable> 

फिर आप इन चर के किसी भी किसी भी पाठ में मानक XPath समारोह concat() का उपयोग कर सकते हैं बिखेरना , यह परिवर्तन:

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

    <xsl:variable name="vApos">'</xsl:variable> 
    <xsl:variable name="vQ">"</xsl:variable> 

    <xsl:template match="/"> 
     <xsl:value-of select= 
     "concat('This movie is named ', $vQ, 'Father', $vApos, 's secrets', $vQ) 
    "/> 
    </xsl:template> 
</xsl:stylesheet> 

पैदा करता है:

This movie is named "Father's secrets" 
1

उपयोग & quot कैसे ठीक करूं पता है; & apos के बजाए; (& एपोज़ का उपयोग करके; आप एकल उद्धरण चिह्नों के अंदर प्रभावी रूप से एकल उद्धरण चिह्नों को घोंसले कर रहे हैं; आपको जितना आवश्यक हो उतना बचने के लिए वैकल्पिक एकल और डबल उद्धरण चिह्नों की आवश्यकता होती है)।

+0

'"' '' '' '' '' '' '' '' 'नहीं है। – Flynn1179

+0

हां - और इस बिंदु पर यह आवश्यक है (यह आमतौर पर XPath अभिव्यक्ति में कोई फर्क नहीं पड़ता)। यदि स्ट्रिंग में एकल उद्धरण चिह्नों के लिए कुछ असाधारण कारणों के लिए वास्तव में आवश्यक है, तो आपको अलग-अलग सिंगल/डबल को अलग-अलग करने की आवश्यकता है: alexbrn

+0

लेकिन मेरा मुद्दा यह है कि ' प्रदान किया जा रहा मूल्य का हिस्सा है; इसे " में बदलने से मूल्य को पारित किया जा सकता है; यह बहुत अलग है। यह स्पष्ट रूप से प्रोग्राम कोड है, और कुछ भाषा में, स्ट्रिंग्स '' ',' '' '', 'जैसे डेल्फी में नहीं हैं। – Flynn1179

3

यह एक छोटे से मुश्किल है, लेकिन आप अपॉस्ट्रफ़ी और उद्धरण, इस तरह उलटने की जरूरत है:

<xsl:with-param name="callme" select='"validateInput(this,&apos;an&apos;);"' /> 

आप उद्धरण में से एक सेट के भीतर एक स्ट्रिंग संलग्न करते रहे हैं, और कहते हैं कि इसमें शामिल विशेषता मान एक और। एक्सएसएलटी में, जो उद्धरण आप उपयोग करते हैं, वे दोनों मामलों में अंतर-परिवर्तनीय होते हैं, जब तक आप इसका उपयोग नहीं करते हैं।

इससे पहले, अपने &apos; रूप match विशेषता के मान पढ़ा जा रहा था पार्स किया जा रहा था, और यह 'validateInput(this,'an');' करने के लिए चयन का मान सेट करने की कोशिश कर रहा था। यद्यपि यह तकनीकी रूप से एक वैध स्ट्रिंग मान है, जब एक्सएसएलटी इसे संसाधित करता है, तो यह इसे पार्स करने में विफल रहता है क्योंकि यह इसे स्ट्रिंग अक्षर के रूप में पढ़ने की कोशिश करता है, जिसे an से पहले समय से समाप्त कर दिया जाता है, क्योंकि उसी एस्ट्रोफ़े का उपयोग वहां किया जाता था जैसा कि संलग्न करने के लिए किया जाता था डोर।

+0

जो कि काफी मंद है xslt टीम लॉल – Pacerier

4

XSLT 2.0 में आप चरित्र यह दोगुना से एक स्ट्रिंग सीमांकक के रूप में इस्तेमाल कर सकते हैं, तो

<xsl:with-param name="callme" select="'validateInput(this,''an'');'"/> 

एक अन्य समाधान चर का उपयोग करने के लिए है:

<xsl:variable name="apos">'</xsl:variable> 
<xsl:variable name="quot">"</xsl:variable> 

<xsl:with-param name="callme" select="concat('validateInput(this,', $apos, 'an', $apos, ');')"/>