2009-04-02 4 views
17

क्या कोई मुझे बता सकता है कि मेरे एक्सएसएल ट्रांसफॉर्म में एक चर को कैसे प्रिंट किया जाए? ऐसा करने के लिए एक आसान पर्याप्त चीज़ की तरह लगता है लेकिन मैं ऐसा करने के लिए प्रतीत नहीं कर सकता।एक एक्सएसएल वैरिएबल के मूल्य को प्रिंट करना

<Wibble> 
     1: {$xmlElem}. 
     2: {$xmlElem}. 
</Wibble> 

:, मैं निम्नलिखित उत्पादन मिलेगा -

<?xml version='1.0' encoding='UTF-8' ?> 
<xsl:stylesheet version="1.0" 
    xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template name="ControlledListStructure"> 
    <xsl:param name="xmlElem" /> 
    <xsl:param name="dataName" /> 

    <xsl:element name="{$xmlElem}"> 
     1: <xsl:text>{$xmlElem}</xsl:text>. 
     2: {$xmlElem}. 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

अगर मैं "Wibble" (एक नोड नहीं एक स्ट्रिंग) की xmlElem के लिए एक मूल्य के साथ इस टेम्पलेट बुलाया: यहाँ कोड मैं है तो मेरा पैरामीटर ठीक से आ रहा है, मैं बस इसे ठीक से नहीं पहुंच सकता। क्या कोई मुझे बता सकता है कि मैं ठीक से प्रिंट करने के लिए $ xmlElem कैसे प्राप्त कर सकता हूं ताकि मैं देख सकूं:

<Wibble> 
     1: Wibble. 
     2: Wibble. 
</Wibble> 

किसी भी इनपुट के लिए धन्यवाद।

+1

मैंने पिछले उत्तरों से कुछ अंतराल छोड़े हैं। अच्छा प्रश्न! –

+1

कृपया दिमित्री के जवाब को "स्वीकृत" के रूप में चिह्नित करने पर विचार करें क्योंकि उनका उत्तर अत्यधिक जानकारीपूर्ण है और "क्यों" नहीं बल्कि "क्यों" है। धन्यवाद! –

उत्तर

31

सभी उत्तरों कुछ महत्वपूर्ण याद कर रहे हैं: पढ़ने के आगे:

कोई मुझे बता सकते हैं कि कैसे करने के लिए प्रिंट आउट मेरी XSL में एक चर को बदलने? ऐसा लगता है कि एक आसान पर्याप्त ऐसा करने की बात है, लेकिन मुझे लगता है कि यह ऐसा नहीं लगता है।

XSLT 1.0 में सामग्री, कि क्या यह एक अदिश मूल्य (स्ट्रिंग, संख्या या बुलियन) होता है, या एक संरचित महत्व है पर निर्भर करता है एक <xsl:variable> के उत्पादन के दो मुख्य तरीके हैं - एक node- सेट (xml दस्तावेज़ (रों) से एक या अधिक नोड्स):

  1. <xsl:value-of select="$yourscalarVariableName"/> इस का प्रयोग करें एक अदिश मूल्य का उत्पादन करने के लिए। असल में एक पाठ नोड उत्पन्न करता है, जिसमें इस स्केलर मान होता है।

  2. <xsl:copy-of select="$yourStructuredVariableName"/> चर में निहित सभी नोड्स की प्रतिलिपि बनाने के लिए इसका उपयोग करें।

यह बहुत पता करने के लिए कि अगर एक xsl:variable नोड्स की एक सूची है और <xsl:value-of ...> अनुदेश प्रयोग किया जाता है, केवल पहली नोड के स्ट्रिंग मान का उत्पादन किया जाएगा महत्वपूर्ण है। यह अक्सर एक बार प्रतिबद्ध त्रुटि और एक अकसर किये गए सवाल है।

एक तिहाई रास्ता है: अगर <xsl:variable> एक विशेषता के उत्पादन में इस्तेमाल किया जाना चाहिए:

<someLiteralResultElement someAttribute="{$theVariable}"/> 

घुंघराले ब्रेसिज़ (AVT -- attribute-value-template कहा जाता है) में XPath अभिव्यक्ति मूल्यांकन किया जाता है और परिणाम में डाल दिया है मान बताइए।xsl:variable में निहित प्रत्येक नोड के लिए एक -

XSLT 2.0 में, <xsl:value-of .../> अनुदेश, जब संगतता मोड में नहीं चला, पाठ नोड्स की एक सूची तैयार करता है। जब संगतता मोड में चलाया जाता है (विशेषता version="1.0" निर्दिष्ट है), <xsl:value-of> निर्देश XSLT 1.0 में वैसे ही व्यवहार करता है जैसा यह करता है।

Xslt 2.0<xsl:copy-of> XSLT 1.0 में वैसे ही व्यवहार करता है। हालांकि नए <xsl:sequence> निर्देश का उपयोग करने की अनुशंसा की जाती है, क्योंकि पूर्व प्रत्येक नोड की एक नई प्रतिलिपि बनाता है, जबकि <xsl:sequence> नोड्स की नई प्रतियां उत्पन्न नहीं करता है।

+0

+1 बहुत जानकारीपूर्ण और अच्छी तरह से किया! –

+0

@ एंड्रयू-हरे धन्यवाद, मैं आपकी राय का बहुत महत्व देता हूं! –

10

इस प्रयास करें:

<xsl:value-of select="$xmlElem"/> 
+0

आपको लगता है कि मैंने कोशिश की होगी! धन्यवाद। –

+0

कभी-कभी सबसे सरल समाधान सबसे अधिक छिपी हुई है! खुशी है कि मैं मदद कर सकता हूँ :) –

4

आप उपयोग कर सकते हैं:

<xsl:value-of select="$xmlElem" /> 
3

{$ xmlElem} सिंटेक्स केवल एक विशेषता के भीतर काम करता है। आप की जरूरत है:

<xsl:value-of select="$xslElem" /> 

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

  • कोई संबंधित समस्या नहीं^_^