2009-09-05 14 views
5

मैं एक्सएसएलटी के लिए नया हूं, और मुझे मूल परिवर्तन किया गया है। इसके बाद मैं तारीख में हेरफेर का प्रयास करना चाहता हूं, क्योंकि मेरे डेटा में टाइमस्टैम्प होंगे। हालांकि, मुझे काम करने के लिए कोई तारीख कार्य नहीं लग रहा है, और यह मुझे बहुत निराश करता है। मैं फ़ायरफ़ॉक्स 3.5, xsltproc 1.1.24, xalan 1.10, और XMLSpy 200 का उपयोग कर परीक्षण कर रहा हूं, और वे सभी कहते हैं कि जिन कार्यों का मैं उपयोग करने का प्रयास कर रहा हूं, वे मौजूद नहीं हैं।एक्सएसएलटी फ़ंक्शंस और नेमस्पेस

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="datetime.xsl"?> 

<watcher> 
    <event id="1" date="2009-09-04T13:49:10-0500" type="ABCD">This is a test </event> 
</watcher> 
</code> 

मेरे XSL तो दिखाई देता है::

मेरे एक्सएमएल इसलिए की तरह लग रहा

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

<xsl:template match="event[@type='ABCD']"> 
<!--   Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/> --> 
<!--   Date: <xsl:value-of select="day-from-dateTime(@date)"/> --> 
       Date: <xsl:value-of select="fn:day-from-dateTime(@date)"/> 
</xsl:template> 

</xsl:stylesheet> 

मैं स्टाइलशीट संस्करण 2 करते हैं, तो XMLSpy शिकायत है कि यह मेरी तारीख डाली नहीं कर सकते हैं: XSLT 2.0 Debugging Error: Error in XPath 2.0 expression (Cast failed, invalid lexical value - xs:dateTime '2009-09-04T13:49:10-0500')

यदि मैं इसे संस्करण 1 के रूप में छोड़ देता हूं, तो यह एक अलग त्रुटि के बारे में शिकायत करता है: XSLT 1.0 Debugging Error: Error in XPath expression (Unknown function - Name and number of arguments do not match any function signature in the static context - 'day-from-dateTime')

जब भी मैं एक्सएसएल को नामस्थान का उपयोग करने के लिए बदलने की कोशिश करता हूं, जैसे fn: day-from-dateTime, यह मेरे सभी पार्सर्स के साथ काम करने से इनकार करता है कि The function number 'http://www.w3.org/2005/02/xpath-functions:day-from-dateTime' is not available और इसके प्रकार। मैं अन्य परीक्षणों से जानता हूं कि मैं किसी भी नेमस्पेस उपसर्ग की आवश्यकता के बिना, सबस्ट्रिंग() फ़ंक्शन पूरी तरह से उपयोग कर सकता हूं, और मेरा मानना ​​है कि यह दिन-दर-तारीख समय के समान नामस्थान में है।

मुझे लगता है कि यह कुछ अविश्वसनीय रूप से आसान है, क्योंकि सभी ट्यूटोरियल कार्यों का उपयोग किया जा रहा है, लेकिन ऐसा लगता है कि कुछ मुझे परेशान कर रहा है। क्या कोई मुझे दिखा सकता है कि मैं क्या खो रहा हूं?

उत्तर

7

ओच, यहां पर बुरा संस्करण संस्करण चल रहा है। आपके द्वारा देखे जा रहे कई मुद्दे होंगे क्योंकि एक्सएसएलटी प्रोसेसर जिसका आप उपयोग कर रहे हैं, XPath 2.0 का समर्थन नहीं करता है, जहां वह दिन-दर-तारीख टाइम फ़ंक्शन आता है।

मैं Saxon processor - सैक्सन-बी 9.1.0.6 के साथ Xalan के बजाय मेरे प्रोसेसर के रूप में काम करने के लिए क्या करने की कोशिश कर रहा हूं, मैं प्राप्त कर सकता हूं। (Xalan, केवल XPath 1.0 का समर्थन करने के लिए प्रकट होता है documentation के अनुसार)

अपने दस्तावेज़ों में कुछ त्रुटियां नहीं हैं:

स्रोत दस्तावेज़, नहीं 0500

<?xml version="1.0" encoding="UTF-8"?> 
<watcher> 
    <event id="1" date="2009-09-04T13:49:10-05:00" type="ABCD">This is a test </event> 
</watcher> 
05:00 के रूप में समय क्षेत्र होना चाहिए

एक्सएसएलटी को स्ट्रिंग कास्ट करना चाहिए 2009-09-04T13: 49: 10-05: 00 एक एक्सएस में: डेटटाइम, जो कि दिन-दर-तारीख समय की तर्क है।

Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/> 

और फिर यह

<?xml version="1.0" encoding="UTF-8"?> 



     Date: 4 

आशा है कि मदद करता है,

+0

काम करता है दिनांक स्वरूप और अपने सुझाव प्रति XSL बदलने के बाद, XMLSpy काम करता है। हालांकि, फ़ायरफ़ॉक्स और मेरी सीएलआई उपयोगिताएं अभी भी शिकायत करती हैं कि फ़ंक्शन मौजूद नहीं है। xsltproc किसी भी फ़ंक्शन को नहीं जानता है, हालांकि मैंने सुना है कि यह XSLT 2 का समर्थन नहीं करता है। Xalan केवल दिन-दर-तारीख के बारे में शिकायत करता है, xs नहीं: dateTime()। मुझे xs के लिए नेमस्पेस की आवश्यकता क्यों है, लेकिन एफएन के लिए नहीं? – hufman

+1

ठीक है - मेरे ज्ञान का सबसे अच्छा: ज़लान केवल XPath 1.0 का समर्थन करता है, जिसका अर्थ है कि दिन-दर-तिथि समय नामक फ़ंक्शन के बारे में पता नहीं है। प्रोसेसर जो XPath 2 का समर्थन करते हैं।0 में दिन-दर-तारीख टाइम बनाया गया है, इसलिए आप नामस्थान उपसर्ग और यूआरआई स्पष्ट रूप से घोषित कर सकते हैं, या केवल उस फ़ंक्शन नाम का उपयोग कर सकते हैं जैसा कि इसे बनाया गया है। आपको डेटाटाइप के लिए नेमस्पेस उपसर्ग की आवश्यकता है क्योंकि इसमें अंतर्निहित नहीं है XPath 2.0 फ़ंक्शन के समान ही। – Brabster

+2

जब तक आप केवल XPath 2.0 सहायक पुस्तकालयों का उपयोग नहीं करते हैं, तो आपको XPath 2.0 बिल्टिन का उपयोग करने में समस्याएं आती हैं। यदि आप विशेष रूप से XPath 2.0 libs का उपयोग नहीं कर सकते हैं, तो आप एक कस्टम फ़ंक्शन लाइब्रेरी बना सकते हैं जो आपको आवश्यक दिनांक और समय प्रबंधन कार्यक्षमता को दोबारा लागू करता है। मुझे लगता है कि FunctX यहां मदद कर सकता है। http://www.xqueryfunctions.com/xq/fn_day-from-datetime.html – Brabster

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