में अद्वितीय रिकॉर्ड चुनना मुझे <xsl:for-each>
लूप के संदर्भ में, XML दस्तावेज़ से केवल अद्वितीय रिकॉर्ड चुनना है। मैं एक्सएसएल 1.0 का उपयोग करने के लिए विजुअल स्टूडियो द्वारा सीमित हूं।एक्सएसएलटी/XPath
<availList>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-25</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>13:00:00</schFrmTime>
<schToTime>14:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
</availList>
विशिष्टता तीन बच्चे तत्वों के मूल्य के आधार पर किया जाना चाहिए: schDate
, schFrmTime
और schToTime
। यदि दो item
तत्वों के पास सभी तीन बाल तत्वों के लिए समान मान हैं, तो वे डुप्लिकेट हैं। उपर्युक्त एक्सएमएल में, आइटम एक और दो डुप्लिकेट हैं। बाकी अद्वितीय हैं। जैसा ऊपर बताया गया है, प्रत्येक आइटम में अन्य तत्व होते हैं जिन्हें हम तुलना में शामिल नहीं करना चाहते हैं। 'विशिष्टता' उन तीन तत्वों, और अकेले उन लोगों का एक कारक होना चाहिए।
मैं निम्नलिखित के माध्यम से यह पूरा करने का प्रयास किया है:
availList/item[not(schDate = preceding:: schDate and schFrmTime = preceding:: schFrmTime and schToTime = preceding:: schToTime)]
इसके पीछे विचार रिकॉर्ड चयन करने के लिए जहां एक ही schDate
, schFrmTime
और schToTime
के साथ कोई पिछले तत्व नहीं है। हालांकि, इसका आउटपुट अंतिम आइटम गुम है। ऐसा इसलिए है क्योंकि मेरा XPath वास्तव में उन वस्तुओं को छोड़कर है जहां सभी बाल तत्व मान पूरे पिछले दस्तावेज़ के साथ मेल खाते हैं। कोई भी item
अंतिम आइटम के सभी तत्वों से मेल खाता है - लेकिन क्योंकि प्रत्येक तत्व का मान व्यक्तिगत रूप से किसी अन्य आइटम में मौजूद होता है, अंतिम आइटम को बाहर रखा जाता है।
मैं प्रत्येक पूर्ववर्ती आइटम के लिएके लिए एक ही श्रेणीबद्ध मूल्यों एक concatenated स्ट्रिंग के रूप में सभी बच्चे मूल्यों की तुलना द्वारा सही परिणाम मिल सकता है। क्या कोई इस तरह से जानता है कि मैं ऐसा कर सकता हूं?
अच्छा प्रश्न (+1)। XPath और XSLT समाधान के लिए मेरा उत्तर देखें। –
कुंजी() का उपयोग करने वाली विधि को आमतौर पर मुएनचियन विधि के रूप में जाना जाता है: http://www.jenitennison.com/xslt/grouping/muenchian.html –