क्या एक XSLT वर्तमान तिथि सम्मिलित कर सकता है?


92

एक कार्यक्रम जिसे हम अपने कार्यालय निर्यात रिपोर्ट में उपयोग करते हैं एक एक्सएमएलटी फ़ाइल के साथ एक्सएचटीएमएल फाइल के साथ एक्सएमएल में अनुवाद करके। मैं XSLT को स्वरूपण को बदलने और स्रोत XML फ़ाइल से अधिक जानकारी जोड़ने के लिए फिर से लिख रहा हूं।

मैं अंतिम रिपोर्ट में बनाई गई तारीख को शामिल करना चाहूंगा। लेकिन वर्तमान तिथि / समय मूल XML फ़ाइल में शामिल नहीं है, और न ही मेरा कोई नियंत्रण है कि XML फ़ाइल कैसे बनाई जाती है। ऐसा प्रतीत नहीं होता है कि XSLT में कोई तिथि कार्य निर्माण हो रहा है जो वर्तमान तिथि लौटाएगा।

क्या किसी को कोई अंदाजा नहीं है कि मैं अपने एक्सएसएलटी परिवर्तन के दौरान वर्तमान तिथि को कैसे शामिल कर सकता हूं?


मुझे नहीं पता कि क्या पार्सर का उपयोग किया जा रहा है जो समस्या है। जिस कार्यक्रम का मैंने सीधे निर्यात रिपोर्ट का उपयोग किया था और रिपोर्ट तैयार करने के लिए अपने प्रोग्राम निर्देशिका में XSLT फ़ाइल का उपयोग करता है।
एरिक एनाटास

जवाबों:


115

XSLT 2

दिनांक कार्य मूल रूप से उपलब्ध हैं, जैसे:

<xsl:value-of  select="current-dateTime()"/>

current-date()और भी है current-time()

XSLT 1

EXSLT दिनांक और समय एक्सटेंशन पैकेज का उपयोग करें।

  1. GitHub से दिनांक और समय पैकेज डाउनलोड करें ।
  2. date.xslअपनी XSL फ़ाइलों के स्थान पर निकालें ।
  3. स्टाइलशीट हेडर सेट करें।
  4. आयात करें date.xsl

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

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>


7
का उपयोग कर किसी के लिए .net / c # उपयोग -, EXSLT आयात मानक नेट XSLT ट्रांसफार्मर के साथ काम करने की कोशिश कर बहुत अधिक समय खर्च नहीं करते MVP.XML अभी। इसमें ESXLT के लिए बिल्ट-इन सपोर्ट है
जोएल पुर्रा

14

MSXML पार्सर के लिए, यह प्रयास करें:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>

Msxsl का उपयोग करके XSLT स्टाइल्सशीट स्क्रिप्टिंग भी पढ़ें : स्क्रिप्ट, और JSL , C #, और Visual Basic .NET के साथ XSLT का विस्तार।


यह अपाचे एफओपी के साथ ट्रांसफार्मर के रूप में काम नहीं करता है। त्रुटि संदेश: इंस्टेंस मेथड कॉल टू मेथड के लिए पहले तर्क के रूप में ऑब्जेक्ट इंस्टेंस की आवश्यकता होती है
ट्रे

1
oops: विस्तार-तत्व-उपसर्ग = "msxml" का विस्तार-तत्व-उपसर्ग = "msxsl" होना चाहिए। मेरी प्रणाली पर भी काम करने में विफल रहता है।
जे

14

क्या आपके पास परिवर्तन को चलाने पर नियंत्रण है? यदि हां, तो आप XSL में करंट डेट पास कर सकते हैं और अपने XSL के अंदर से $ करंट-डेट का उपयोग कर सकते हैं। नीचे बताया गया है कि आप आने वाले पैरामीटर को कैसे घोषित करते हैं, लेकिन यह जानने के साथ कि आप कैसे परिवर्तन चला रहे हैं, मैं आपको यह नहीं बता सकता कि मूल्य में कैसे गुजरना है।

<xsl:param name="current-date" />

उदाहरण के लिए, बैश स्क्रिप्ट से, उपयोग करें:

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml

फिर, xsl में आप उपयोग कर सकते हैं:

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

1
वास्तव में, मान कैसे पास करना है यह सिस्टम पर निर्भर है। एक संभावित विकल्प: UNIX पर xsltproc के साथ , यह हो सकता है xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml:। कुछ प्रणालियाँ भी केवल पैरामीटर लेती हैं $param=value, इसलिए उस स्थिति में $current-date=`date +%Y-%m-%d`कहीं। या अन्यथा जो भी XSLT प्रोसेसर आप उपयोग कर रहे हैं, उसमें पैरामीटर निर्दिष्ट करने के तरीकों की तलाश करें।
लिंड करता है

10
...
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:local="urn:local" extension-element-prefixes="msxsl">

    <msxsl:script language="CSharp" implements-prefix="local">
        public string dateTimeNow()
        {       
          return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
        } 
    </msxsl:script>  
...
    <xsl:value-of select="local:dateTimeNow()"/>

7

देर से जवाब, लेकिन मेरा समाधान एक्सेलस एक्सएसएलटी में काम करता है। इस लेखन के समय ग्रहण XSLT 1 का उपयोग करता है। आप सैक्सन की तरह एक XSLT 2 इंजन स्थापित कर सकते हैं। या आप वर्तमान तिथि और समय सम्मिलित करने के लिए नीचे दिए गए XSLT 1 समाधान का उपयोग कर सकते हैं।

<xsl:value-of select="java:util.Date.new()"/>

यह तिथि को आउटपुट करने के लिए जावा के डेटा वर्ग को कॉल करेगा। यह तब तक काम नहीं करेगा जब तक आप अपने <xsl:stylesheet>टैग में निम्नलिखित "जावा:" की परिभाषा नहीं देते ।

<xsl:stylesheet [...snip...]
         xmlns:java="java"
         [...snip...]>

मुझे उम्मीद है कि किसी की मदद करता है। यह सरल उत्तर मेरे लिए खोजना मुश्किल था।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.