xml - Using XSL to keep a running total -


मेरे पास निम्न XML है:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8" & gt; & Lt;? Xml-stylesheet type = "text / xsl" href = "disp.xsl"? & Gt; & LT; जड़ & gt; & Lt; नोड प्रकार = "ए" & gt; & LT; मूल्य & gt; 4 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "बी" & gt; & LT; मूल्य & gt; 2 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "ए" & gt; & LT; मूल्य & gt; 3 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "बी" & gt; & LT; मूल्य & gt; 1 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; / root  

मैं एक रिपोर्ट का निर्माण करना चाहता हूं जो प्रत्येक प्रकार के मूल्य तत्वों को योग करता है और एक कुल चल रहा है। IE, मैं चाहता हूं:

  प्रकार: एक कुल: 7 संचयी कुल: 7 प्रकार: ब कुल: 3 संचयी कुल: 10  

यह मेरा एक्सएसएल है :

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "आईएसओ -8859-1"? & Gt; & Lt; xsl: स्टाइलशीट संस्करण = "1.0" xmlns: xsl = "http://www.w3.org/1999/XSL/transform" & gt; & Lt; xsl: कुंजी नाम = "प्रत्येक प्रकार" मैच = "नोड" उपयोग = "@ प्रकार" / & gt; & Lt; xsl: टेम्पलेट मैच = "/ रूट" & gt; & LT; html & gt; & LT; बॉडी & gt; & Lt; xsl: प्रत्येक चयन = "नोड" & gt; मान: & lt; xsl: मान का चयन करें = "मान" / & gt; (संचयी मूल्य: & lt; xsl: variable name = "temp" select = "sum (पूर्ववर्ती-साईबलिंग :: नोड / मान) + मान" / & gt; & lt; xsl: मान का चयन करें = "$ temp" / & gt; ) & Lt; br / & gt; & Lt; / XSL: के लिए-प्रत्येक & gt; & Lt; घंटा / & gt; & Lt; xsl: प्रत्येक चयन = "नोड" & gt; & Lt; xsl: चर नाम = "thisType" चुनें = "@ प्रकार" / & gt; प्रकार: & lt; xsl: मान का चयन करें = "$ thisType" / & gt; मान: & lt; xsl: मान का चयन करें = "मान" / & gt; (संचयी मूल्य: & lt; xsl: variable name = "temp2" select = "sum (पूर्ववर्ती-साईबलिंग :: नोड / मान) + मान" / & gt; & lt; xsl: मान का चयन करें = "$ temp2" / & gt; ) & Lt; br / & gt; & Lt; / XSL: के लिए-प्रत्येक & gt; & Lt; घंटा / & gt; & Lt; xsl: प्रत्येक चयन = "नोड [जेनरेट-आईडी (।) = जनरेट-आईडी (कुंजी ('प्रत्येक प्रकार', @ प्रकार) [1])]" & gt; & Lt; xsl: चर नाम = "thisType" चुनें = "@ प्रकार" / & gt; प्रकार: & lt; xsl: मान का चयन करें = "$ thisType" / & gt; कुल: & lt; xsl: मान का चयन करें = "योग (/ रूट / नोड [@ प्रकार = $ इस टाइप] / मूल्य)" / & gt; (संचयी मूल्य: & lt; xsl: variable name = "temp2" चुनें = "योग (पूर्ववर्ती-साईबलिंग :: मान) + मान" / & gt; & lt; xsl: मान का चयन करें = "$ temp2" / & gt;) & lt ; Br / & gt; & Lt; / XSL: के लिए-प्रत्येक & gt; & Lt; / body & gt; & Lt; / html & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; / XSL: स्टाइलशीट & gt;  

निम्न उत्पादन का उत्पादन करता है:

  मान: 4 (संचयी मान: 4) मान: 3 (संचयी मान: 7) मूल्य: 2 (संचयी मूल्य: 9) मूल्य: 1 (संचयी मूल्य: 10) ------------------------------------- ------------------------------------------- प्रकार: एक मान: 4 ( संचयी मूल्य: 4) प्रकार: एक मान: 3 (संचयी मूल्य: 7) प्रकार: बी मान: 2 (संचयी मूल्य: 9) प्रकार: बी मान: 1 (संचयी मूल्य: 10) --------- -------------------------------------------------- --------------------- प्रकार: एक कुल: 7 (संचयी मूल्य: 4) प्रकार: b कुल: 3 (संचयी मान: 2)  < / पूर्व> 

मुझे अंतिम दो पंक्तियों में संचयी कुल के लिए सही मूल्य प्राप्त करने का कोई तरीका नहीं मिल सकता है क्या वहाँ कोई XSL के दिग्गजों हैं जो XSL के साथ मेरे फ्रिस्ट प्रयास में मेरी मदद कर सकता है?

यह परिवर्तन :

  & lt; xsl: स्टाइलशीट संस्करण = "1.0" xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" & gt; & Lt; xsl: आउटपुट विधि = "टेक्स्ट" / & gt; & Lt; xsl: कुंजी नाम = "केटीएपी" मैच = "@ टाइप" उपयोग = "।" / & Gt; & Lt; xsl: टेम्पलेट मैच = "/" & gt; & Lt; xsl: प्रत्येक चयन = "* / * / @ प्रकार [उत्पन्न-आईडी () = जनरेट-आईडी (कुंजी ('केटीईपी',।) [1])]" & gt; & Lt; xsl: मान का चयन करें = "कॉन्सैट ('टाइप करें:',।, 'Total:', sum (/ * / * [@ type = current ()] / मान), 'संचयी कुल:', / * / * [@ टाइप = चालू ()] [आखिरी ()] / मान + योग (/ * / * [@ टाइप = चालू ()] [आखिरी ()] / पूर्ववर्ती-सिब्लिंग :: * / मान), & amp; ; #xA; ') "/ & gt; & Lt; / XSL: के लिए-प्रत्येक & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; / XSL: स्टाइलशीट & gt;  

प्रदान किए गए XML दस्तावेज़ पर लागू होने पर :

  & lt; root & gt; & Lt; नोड प्रकार = "ए" & gt; & LT; मूल्य & gt; 4 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "ए" & gt; & LT; मूल्य & gt; 3 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "बी" & gt; & LT; मूल्य & gt; 2 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; नोड प्रकार = "बी" & gt; & LT; मूल्य & gt; 1 & lt; / मूल्य & gt; & Lt; / नोड & gt; & Lt; / जड़ & gt;  

वांछित, सही परिणाम उत्पन्न करता है :

  प्रकार: एक कुल: 7 संचयी कुल: 7 प्रकार: b कुल: 3 संचयी कुल: 10  

ध्यान दें कि यह समाधान कुशल नहीं है ब्रेक के बाद मैं एक और कुशल (रिकर्सिव) प्रदान करेगा I :)


Comments