2012-04-10 10 views
6

हम अल्टोवा स्टाइलविजन का उपयोग करते हैं जो एक्सएसएलटी 2.0 फाइलें उत्पन्न करता है। हम इन एक्सएसएलटी फ़ाइलों को निष्पादित करने के लिए जावा के लिए सैक्सन 9 का उपयोग करते हैं। यह कुछ सालों से अच्छी तरह से काम कर रहा है, हां हम में से कोई भी वास्तव में एक्सएसएलटी को नहीं समझता है।एक्सएसएलटी 2.0 त्रुटि उत्पन्न करता है: "संदर्भ आइटम अपरिभाषित है"

Error at /xsl:stylesheet/xsl:function[9] 
XPDY0002: Axis step child::element(item, xs:anyType) cannot be used here: 
    the context item is undefined 

9 समारोह है:

अब हम त्रुटि है

<xsl:function name="sps:GoogleChartDataSourceUnitCount" as="xs:string"> 
    <xsl:sequence select="concat(string-join(item/string(if (number($XML/report/calculation-data[@data-source-name = $DataSourceParent]/item/variable[@name=&apos;unit_count&apos;]/@value) &lt; 0) then 0 else round-half-to-even(number(variable[@name=&apos;unit_count&apos;]/@value),2)),&apos;,&apos;),&apos;&amp;chxl=0:|&apos;,string-join(item/variable[@name=&apos;month&apos;]/@value,&apos;|&apos;),&apos;|2:||Min&amp;chds=0,&apos;,string(round-half-to-even(max(item/(number(variable[@name=&apos;unit_count&apos;]/@value)))+1 , 0)),&apos;&amp;chxr=1,0,&apos;,string(round-half-to-even(max(item/(number(variable[@name=&apos;unit_count&apos;]/@value)))+1 , 0)))"/> 
</xsl:function> 

किसी को भी किसी भी विचार क्या हो रहा है है?

उत्तर

8

समस्या समारोह item जो the specification mandates के रूप में "एक संदर्भ आइटम जरूरत है एक स्टाइलशीट समारोह के शरीर के भीतर की तरह पथ भाव का उपयोग करता है, ध्यान शुरू में अपरिभाषित है कि है, इसका मतलब संदर्भ आइटम संदर्भित करने के लिए कि किसी भी प्रयास, संदर्भ स्थिति , या संदर्भ आकार एक गैर-पुनर्प्राप्तिशील गतिशील त्रुटि है। [XPDY0002] "। तो फ़ंक्शन को एक पैरामीटर होना चाहिए जो नोड या नोड्स के अनुक्रम में गुजरता है जिस पर पथ लागू किया जाना चाहिए उदा।

<xsl:function name="sps:GoogleChartDataSourceUnitCount" as="xs:string"> 
    <xsl:param name="nodes"/> 
    <xsl:sequence select="concat(string-join($nodes/item/string(...)))"/> 
</xsl:function> 

और फिर उदा। sps:GoogleChartDataSourceUnitCount(.)

यदि अल्टोवा से कुछ टूल द्वारा स्टाइलशीट उत्पन्न होता है तो आप Altova forums में पूछताछ करना चाहेंगे कि यह एक ज्ञात समस्या है और क्या कोई फिक्स उपलब्ध है या नहीं।

7

W3C XSLT 2.0 specification के अनुसार, xsl:function के लिए प्रारंभिक संदर्भ आइटम अपरिभाषित है।

इसका मतलब है कि फ़ंक्शन बॉडी के अंदर डेटा (आइटम) का कोई संदर्भ केवल पैरामीटर (पारित या वैश्विक) या चर से हो सकता है।

समस्या यह है कि प्रदान की कोड में एक अभिव्यक्ति के साथ शुरू होता है:

concat(string-join(item ... 

और यह स्पष्ट रूप से ऊपर नियम का उल्लंघन करती - item एक संदर्भ आइटम, जिनमें से अंदर की अनुमति नहीं है बंद संदर्भित है एक xsl:function

समाधान:

  1. एक पैरामीटर (अनुशंसित) के रूप में इच्छित संदर्भ आइटम दर्रा pDoc इच्छित संदर्भ आइटम नामित कहना है, या एक वैश्विक चर/पैरामीटर होते हैं।

  2. कि पैरामीटर/चर बंद एक XPath अभिव्यक्ति के पहले स्थान चरण में संदर्भ आइटम, उदाहरण $pDoc/item

पूछे जाने वाले प्रश्न के लिए: क्यों इस सीमा है?

उत्तर: एक अंतर्निहित प्रारंभिक संदर्भ आइटम को एक्सएसएलटी प्रोसेसर के लिए अधिक व्यापक स्थिर विश्लेषण करने और कोड को अधिक आक्रामक रूप से अनुकूलित करने के लिए संभव बनाता है।

3

आप विभिन्न समस्याओं के मामलों से इस समस्या का सामना कर सकते हैं। मेरे लिए, क्योंकि मैं अपने फ़ंक्शन, के अंदर परम से पहले डॉलर ($) चिह्न डालना भूल गया था, इसलिए प्रोसेसर सोचता है कि मैं संदर्भ को इंगित किए बिना नोड-टैग का उपयोग कर रहा हूं, फिर यह त्रुटि देता है। मुझे बस अपने परम से पहले $ डालना होगा। आशा है कि मेरा समाधान दूसरों के लिए सहायक हो।

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