2009-03-13 12 views
12

मैं इस तरह टाइमस्टैम्प के साथ एक एक्सएमएल है:एक्सएसएलटी के साथ टिक्स को एक पठनीय डेटाटाइम में कैसे परिवर्तित करें?

<node stamp="1236888746689" /> 

और मैं उन्हें समय के साथ तारीख के रूप में परिणाम HTML में प्रदर्शित करना चाहते हैं। क्या एक्सएसएलटी (कोई संस्करण) के साथ ऐसा करने का कोई तरीका है?

संपादित करें: मैं सैक्सन 9 के साथ एक्सएसएलटी 2.0 का उपयोग कर रहा हूं। मूल तिथि 1 9 70-01-01 0:00 है।

+0

तकनीकी रूप से संभव है, लेकिन अक्षम और आगे इनपुट की आवश्यकता है (शून्य-समय की परिभाषा की तरह)। मैं इसे विस्तार से बाहर कर दूंगा - आपका मंच क्या है? – annakata

उत्तर

13

आप तारीख 1970-01-01T00:00:00 लेने के लिए और के रूप में कई मिलीसेकेंड जोड़ने के रूप में टिकट के मूल्य में बताता है:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://www.w3.org/TR/xhtml1/strict"> 

    <xsl:template match="node"> 
     <xsl:value-of 
select='xs:dateTime("1970-01-01T00:00:00") + @stamp * xs:dayTimeDuration("PT0.001S")'/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

उस पर एक विशेषता के बजाय, नोड में आंतरिक पाठ का उपयोग करने के लिए उत्तर को कैसे संशोधित किया जाएगा? – Broam

+0

@ ब्रॉम ''। –

0

एक्सएसएलटी Turing complete है, इसलिए एक तरीका होना चाहिए। :) कम से कम एक्सएसएलटी को जानना, इसमें शायद रिकर्सन शामिल होगा।

आप अपने "टिक" की सटीक व्याख्या निर्दिष्ट नहीं करते हैं, मैं कुछ युग के बाद मिलीसेकंड का अनुमान लगा रहा हूं, लेकिन कौन सा? 1970

1

आप एक XSL 1.0 प्रोसेसर कि EXSLT date and time functions का समर्थन नहीं करता इस गैर तुच्छ है का उपयोग करना चाहता है तो , लेकिन यह किया गया है।

आप Katy Coe's XSLT 1.0 implementation of the "iso-from-unix" function पर एक नज़र डाल सकते हैं। यह एक बड़ी "गैर-वाणिज्यिक उपयोग के लिए मुफ्त" का हिस्सा है जो उसने बनाई तारीख और समय कार्यों के सेट।

हालांकि, आपके एक्सएसएल प्रोसेसर को इस कार्यान्वयन के लिए "http://exslt.org/functions" नेमस्पेस का समर्थन करना चाहिए। इसके अलावा EXSLT पर कोई निर्भरता नहीं है।

पीएस .: मुझे पता है कि यूनिक्स टाइमस्टैम्प और टिक बिल्कुल समान नहीं हैं। हालांकि, वे काफी करीब हैं।

8

आप एक XSLT 1.0 प्रोसेसर जो EXSLT date functions का समर्थन करता है (मैं बस PHP में libxslt के साथ इस परीक्षण किया है) का उपयोग कर रहे हैं, तो आप date:add() और date:duration() उपयोग कर सकते हैं:

<xsl:value-of select="date:add('1970-01-01T00:00:00Z', date:duration(@stamp div 1000))"/> 

date:duration() समारोह के एक नंबर ले जाता है सेकंड (इसलिए आपको 1000 से अपने मिलीसेकंड को विभाजित करना होगा) और इसे "अवधि" में बदल देता है (इस मामले में, "P14315DT20H12M26.6889998912811S"), जिसे बाद में आपके युग की शुरुआत में जोड़ा जाता है (मानक युग की तरह दिखता है, इस टिकट के लिए) date:add() के साथ "2009-03-12T20:12:26.6889998912811Z" का टिकट प्राप्त करने के लिए। इसके बाद आप EXSLT दिनांक फ़ंक्शंस या केवल substring() का उपयोग करके इसे प्रारूपित कर सकते हैं, जो आपको चाहिए।

4

बेले गए उत्तर, हाँ, मुझे पता है, लेकिन मुझे वह नहीं मिला जो मैं यहां देख रहा था, इसलिए मैंने सोचा कि मैं इसे अपने समाधान के साथ आगे बढ़ाऊंगा।

मेरा एक्सएमएल निर्यात_नोड और ड्रश का उपयोग करके ड्रूपल से डंप किए गए कुछ नोड्स था। मैं PHP5 में xslt प्रोसेसर का उपयोग कर रहा था, जो केवल xslt 1.0 का समर्थन करता है। कुछ EXSLT फ़ंक्शन समर्थित होने लगते हैं, लेकिन मैं यह नहीं बता सका कि मेरा वाक्यविन्यास गलत था या जिस फ़ंक्शन का उपयोग करने का प्रयास कर रहा था वह समर्थित नहीं था। वैसे भी, मेरे लिए निम्नलिखित काम किया। मैंने w3schools से उदाहरण कोड का उपयोग किया।कॉम, लेकिन xsltprocessor घोषित करने के ठीक बाद एक पंक्ति जोड़ा, जैसे:

$ xp = new XsltProcessor();
$ xp-> रजिस्टर पीएचपीफंक्शन();

PHP के दिनांक रूपांतरण के लिए एक छोटा सा कार्य है, इसलिए मैंने धोखा दिया और PHP प्रोसेसर का उपयोग किया, क्योंकि मैं पहले से ही अपने xsl को बदलने के लिए इसका उपयोग कर रहा था।

<xsl:for-each select="node_export/node"> 
    <xsl:value-of select="php:function('date', 'n-j-y', number(timestamp))"/> 
</xsl:for-each> 

आशा इस कोई वहाँ बाहर में मदद करता है। मैं थोड़ी देर के लिए अपने सिर पर टक्कर लगी थी क्योंकि मैंने इसे एक काम किया था।

+1

मैंने यह भी पाया कि मुझे इसका उपयोग करने की आवश्यकता है: '' – kenny

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

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