दिलचस्प पोस्ट
एचटीएमएल में छवियों को लोड करना जावास्क्रिप्ट में सेट इन्टरलेबल कॉल बंद करें अपने ज्ञात फ़ॉन्ट आकार और वर्णों के लिए WPF TextBlock चौड़ाई की गणना कैसे करें? जावास्क्रिप्ट प्रारूप दिनांक / समय jqgrid लंबा पाठ लपेटन आईओएस 3.1.3 पर स्टार्टअप पर आईओएस 4 एप क्रैश: प्रतीक नहीं मिला: __NSConcreteStackBlock PHP में विशाल XML फ़ाइलों को पार्स करना Cdecl कॉल अक्सर "मानक" पी / आग्रह सम्मेलन में क्यों बेमेल है? क्या पोर्टेबल तरीके से सरणी के लिए प्लेसमेंट नई इस्तेमाल किया जा सकता है? HttpWebRequest कनेक्शन टाइमआउट को सी # में समायोजित करना क्या जेपीए विनिर्देश गैर-प्राथमिक कुंजी कॉलम के संदर्भ की अनुमति देता है? गाव का उपयोग करके एक सीएसवी फाइल पार्स करना नेस्टेड एनजी-दोहरा में 2 $ इंडेक्स वैल्यू को पारित करना मज़ेदार मैक ओएस एक्स, आईओएस, लिनक्स, सी प्रीप्रोसेसर में विंडोज का पता लगाने के लिए कैसे? Os.walk में निर्देशिकाओं को छोड़कर

XSLT के माध्यम से XML में एक तिथि प्रारूप करें

जब मैं किसी DateTime को सीरियल करने के लिए XML सीरियलइज़र का उपयोग करता हूं, तो यह निम्न प्रारूप में लिखा जाता है:

 <Date>2007-11-14T12:01:00</Date> 

एचटीएमएल आउटपुट के लिए XSLT स्टाइलशीट के माध्यम से गुजरते समय, मैं इसे कैसे प्रारूपित कर सकता हूं? ज्यादातर मामलों में मुझे बस तिथि की ज़रूरत होती है, और जब मुझे समय की आवश्यकता होती है तो मैं निश्चित रूप से "मजेदार टी" नहीं चाहता हूं।

वेब के समाधान से एकत्रित समाधान "XSLT के माध्यम से XML में एक तिथि प्रारूप करें"

यहां कुछ 1.0 टेम्पलेट्स हैं जिनका उपयोग आप कर सकते हैं: –

 <xsl:template name="formatDate"> <xsl:param name="dateTime" /> <xsl:variable name="date" select="substring-before($dateTime, 'T')" /> <xsl:variable name="year" select="substring-before($date, '-')" /> <xsl:variable name="month" select="substring-before(substring-after($date, '-'), '-')" /> <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" /> <xsl:value-of select="concat($day, ' ', $month, ' ', $year)" /> </xsl:template> <xsl:template name="formatTime"> <xsl:param name="dateTime" /> <xsl:value-of select="substring-after($dateTime, 'T')" /> </xsl:template> 

उनसे कॉल करें: –

  <xsl:call-template name="formatDate"> <xsl:with-param name="dateTime" select="xpath" /> </xsl:call-template> 

तथा

  <xsl:call-template name="formatTime"> <xsl:with-param name="dateTime" select="xpath" /> </xsl:call-template> 

जहां xpath एक तत्व या विशेषता का पथ है जिसमें मानक दिनांक समय प्रारूप है।

XSLT 1.0 में दिनांक स्वरूपण आसान नहीं है। शायद सबसे शानदार तरीका है कि दिनांक स्वरूपण के लिए सी # में एक छोटा XSLT एक्सटेंशन फ़ंक्शन लिखना है। यहां एक उदाहरण है:

 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:myExtension="urn:myExtension" exclude-result-prefixes="msxsl myExtension"> <xsl:output method="xml" indent="yes"/> <msxsl:script implements-prefix="myExtension" language="C#"> <![CDATA[ public string FormatDateTime(string xsdDateTime, string format) { DateTime date = DateTime.Parse(xsdDateTime); return date.ToString(format); } ]]> </msxsl:script> <xsl:template match="date"> <formattedDate> <xsl:value-of select="myExtension:FormatDateTime(self::node(), 'd')"/> </formattedDate> </xsl:template> </xsl:stylesheet> 

इस इनपुट दस्तावेज़ के साथ

 <?xml version="1.0" encoding="utf-8"?> <date>2007-11-14T12:01:00</date> 

तुम्हे मिल जाएगा

 <?xml version="1.0" encoding="utf-8"?> <formattedDate>14.11.2007</formattedDate> 

तारीख को फ़ंक्शन स्वरूपित करने के लिए दिनांक मान को स्ट्रिंग और दिनांक स्वरूप के रूप में वर्णित किया जाता है, जैसे DateTime.ToString विधि । .NET का दिनांकटाइम स्ट्रक्चर का उपयोग करके आपको मनमानी एक्सएसडी दिन-समय मूल्य (समय क्षेत्र निर्दिष्टकर्ताओं सहित), समयक्षेत्र गणना और स्थानीयकृत आउटपुट मुफ्त में पार्स करता है।

हालांकि, ध्यान रखें कि एक चेतावनी है (http://support.microsoft.com/kb/316775) msxml स्क्रिप्ट एक्सटेंशन के साथ: हर बार जब आप XSLT को लोड करते हैं, तो स्क्रिप्ट कोड वाला एक असेंबली गतिशील रूप से उत्पन्न होता है और स्मृति में लोड होता है। .NET रनटाइम के डिज़ाइन के कारण, इस विधानसभा को अनलोड नहीं किया जा सकता है। यही कारण है कि आपको यह सुनिश्चित करना है कि आपका एक्सएसएलटी केवल एक बार भरी हुई है (और फिर पुनः उपयोग के लिए कैश की गई) आईआईएस के अंदर चलने पर यह विशेष रूप से महत्वपूर्ण है।

जॉन वर्कमैन इस मुद्दे की लंबाई पर चर्चा करता है और अपने ब्लॉग पर इस चर्चा [1] में कई समाधान देता है असल में, व्यक्तिगत तिथि घटकों को पार्स करें और जो कुछ भी आप चाहते हैं उसमें पुन: संयोजन करें। आपके मामले के लिए, एक शुद्ध XSLT 1.0+ संस्करण होगा:

 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="date"> <!-- converts FROM <date>2001-12-31T12:00:00</date> TO some new format (DEFINED below) --> <xsl:template name="FormatDate"> <xsl:param name="DateTime" /> <xsl:variable name="year" select="substring($DateTime,1,4)" /> <xsl:variable name="month-temp" select="substring-after($DateTime,'-')" /> <xsl:variable name="month" select="substring-before($month-temp,'-')" /> <xsl:variable name="day-temp" select="substring-after($month-temp,'-')" /> <xsl:variable name="day" select="substring($day-temp,1,2)" /> <xsl:variable name="time" select="substring-after($DateTime,'T')" /> <xsl:variable name="hh" select="substring($time,1,2)" /> <xsl:variable name="mm" select="substring($time,4,2)" /> <xsl:variable name="ss" select="substring($time,7,2)" /> <!-- EUROPEAN FORMAT --> <xsl:value-of select="$day"/> <xsl:value-of select="'.'"/> <!--18.--> <xsl:value-of select="$month"/> <xsl:value-of select="'.'"/> <!--18.03.--> <xsl:value-of select="$year"/> <xsl:value-of select="' '"/> <!--18.03.1976 --> <xsl:value-of select="$hh"/> <xsl:value-of select="':'"/> <!--18.03.1976 13: --> <xsl:value-of select="$mm"/> <xsl:value-of select="':'"/> <!--18.03.1976 13:24 --> <xsl:value-of select="$ss"/> <!--18.03.1976 13:24:55 --> <!-- END: EUROPEAN FORMAT --> </xsl:template> 

एक अन्य प्रारूप (यूरोपीय प्रारूप अनुभाग को बदलता है):

 <!-- Long DATE FORMAT --> <xsl:choose> <xsl:when test="$month = '1' or $month= '01'">January</xsl:when> <xsl:when test="$month = '2' or $month= '02'">February</xsl:when> <xsl:when test="$month= '3' or $month= '03'">March</xsl:when> <xsl:when test="$month= '4' or $month= '04'">April</xsl:when> <xsl:when test="$month= '5' or $month= '05'">May</xsl:when> <xsl:when test="$month= '6' or $month= '06'">June</xsl:when> <xsl:when test="$month= '7' or $month= '07'">July</xsl:when> <xsl:when test="$month= '8' or $month= '08'">August</xsl:when> <xsl:when test="$month= '9' or $month= '09'">September</xsl:when> <xsl:when test="$month= '10'">October</xsl:when> <xsl:when test="$month= '11'">November</xsl:when> <xsl:when test="$month= '12'">December</xsl:when> </xsl:choose> <xsl:value-of select="' '"/> <!--January --> <xsl:value-of select="$day"/> <!--January 12 --> <xsl:value-of select="','"/> <!--January 12,--> <xsl:value-of select="' '"/> <!--January 12, --> <xsl:value-of select="$year"/> <!--January 12, 2001--> <!-- END: Long DATE FORMAT --> 

आप तत्वों को किसी भी तरह से चुन सकते हैं।

[1] http://geekswithblogs.net/workdog/archive/2007/02/08/105858.aspx @@ http://archive.is/4Hjep

इस पुरानी धागा पर टिप्पणी करने के लिए क्षमा चाहते हैं, लेकिन दूसरों को मेरे लिए इसे ढूंढने के लिए आप जावास्क्रिप्ट का उपयोग भी कर सकते हैं यदि आप एमएस ट्रांसफार्मर का उपयोग कर रहे हैं:

"एमएसएक्सएसएल" नाम स्थान की घोषणा करें:

 xmlns:msxsl="urn:schemas-microsoft-com:xslt" 

अपनी स्क्रिप्ट के लिए एक नेमस्पेस घोषित करें:

 xmlns:js="urn:custom-javascript" 

(वैकल्पिक) आउटपुट से उपसर्गों को छोड़ दें:

 exclude-result-prefixes="msxsl js" 

तो आप इस तरह एक एक्सएसएल घोषणा के साथ समाप्त:

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:custom-javascript" exclude-result-prefixes="msxsl js"> 

Msxsl में जावास्क्रिप्ट लिखें: स्क्रिप्ट तत्व:

 <msxsl:script language="JavaScript" implements-prefix="js"> <![CDATA[ function javascriptFunction(dateValue){ var date = new Date(dateValue); if(!isNaN(date)) return date.toLocaleString(); return dateValue; } ]]> </msxsl:script> 

अपने जावास्क्रिप्ट फ़ंक्शन को कॉल करें (XPath सिंटैक्स का उपयोग करके '।' इस नोड को इंगित कर रहा है):

 <xsl:value-of select="js:javascriptFunction(string(.))"/> 

एनबी: लेखन के रूप में बाहरी जेएस फाइलों को शामिल करने के लिए एक (एक्सएसएल) तरीका नहीं लगता है (जैसे। Jquery पुस्तकालय)। यह परिवर्तन से पहले एक्सएसएल फ़ाइल सर्वर साइड को पार्स करने और जेएस फाइल सामग्री को सीडीएटीए अनुभाग में एक स्ट्रिंग के रूप में जोड़कर किया जा सकता है। मैं खुद को इस मार्ग से नीचे जाना शुरू कर दिया था लेकिन निष्कर्ष निकाला है कि यदि आपको इस स्तर की कार्यक्षमता की आवश्यकता है तो यह पाइप लाइन के एक अलग हिस्से में बेहतर रखा जा सकता है।

स्रोत: http://dev.ektron.com/kb_article.aspx?id=482
रेफरी: http://www.ibm.com/developerworks/xml/library/x-tipxsltjs/index.html

रॉय के पद के लिए सुधार: समारोह से दिन को हमेशा महीने के मूल्य मिल जाएगा निम्न का उपयोग करें:

 <xsl:variable name="year" select="substring($dateTime,1,4)" /> <xsl:variable name="month-temp" select="substring-after($dateTime,'-')" /> <xsl:variable name="month" select="substring-before($month-temp,'-')" /> <xsl:variable name="day-temp" select="substring-after($month-temp,'-')" /> <xsl:variable name="day" select="substring($day-temp,1,2)" /> <xsl:variable name="time" select="substring-after($dateTime,'T')" /> <xsl:variable name="hh" select="substring($time,1,2)" /> <xsl:variable name="mm" select="substring($time,4,2)" /> <xsl:variable name="ss" select="substring($time,7,2)" /> <xsl:value-of select="concat($month,'/',$day,'/',$year,' ',$hh,':',$mm,':',$ss)" /> 

धन्यवाद, इस पोस्ट ने बहुत मदद की है

मैं एक आरएसएस फ़ीड बदल रहा था जो निम्नलिखित दिनांक प्रारूप का उपयोग करता है: सोम, 04 अप्रैल 2011 23:18:00 -0700 यह नामित टेम्पलेट है जिसे मैं इसे पार्स करने के लिए इस्तेमाल किया।

 <!--Parse date format: Mon, 04 Apr 2011 23:18:00 -0700--> <xsl:template name="formatDate"> <xsl:param name="dateIn" /> <xsl:variable name="day" select="substring($dateIn, 0, 3)" /> <xsl:variable name="date" select="substring($dateIn, 6, 2)" /> <xsl:variable name="month" select="substring($dateIn, 9, 3)" /> <xsl:variable name="year" select="substring($dateIn, 13, 4)" /> <xsl:variable name="hour" select="substring($dateIn, 18, 2)" /> <xsl:variable name="min" select="substring($dateIn, 21, 2)" /> <xsl:variable name="sec" select="substring($dateIn, 24, 2)" /> <xsl:value-of select="concat($date, ' ', $month, ' ', $year, ' ', $hour, ':', $min, ':', $sec)" /> </xsl:template>