xml - Basex XQL merging content with same tag name, regardless of location in document -
उदाहरण के लिए, दी XML:
& lt; root & gt; & LT; आइटम & gt; & LT; आईडी & gt; 111 & lt; / आईडी & gt; & Lt; विवरण & gt; गलियारा 12, शेल्फ 3 & lt; / description & gt; & Lt; विवरण & gt; बॉक्स के अंदर & lt; / description & gt; & Lt; / मद & gt; & Lt; / जड़ & gt;
मुझे परिणाम चाहिए:
& lt; root & gt; & LT; आइटम & gt; & LT; आईडी & gt; 111 & lt; / आईडी & gt; & Lt; विवरण & gt; गलियारा 12, बॉक्स के अंदर शेल्फ 3 & lt; / description & gt; & Lt; / मद & gt; & Lt; / जड़ & gt;
लेकिन नोड में कोई भी नाम हो सकता है, और किसी भी स्तर पर हो सकता है। मैं एक ही क्वेरी को विभिन्न एक्सएमएल के साथ काम करने के लिए चाहूंगा, जब तक टैग को दोहराया जाता है:
& lt; root & gt; & LT; आइटम & gt; & LT; आईडी & gt; 112 & lt; / आईडी & gt; & LT; जिम्मेदार बताते हैं & gt; & Lt; लेखक & gt; जो स्मिथ & lt; / author & gt; & Lt; लेखक & gt; आर्थर क्लार्क & lt; / author & gt; & Lt; लेखक & gt; यिर्मयाह राइट & lt; / author & gt; & Lt; / विशेषताओं & gt; & Lt; / मद & gt; & Lt; / जड़ & gt;
आउटपुट:
& lt; रूट & gt; & LT; आइटम & gt; & LT; आईडी & gt; 112 & lt; / आईडी & gt; & LT; जिम्मेदार बताते हैं & gt; & Lt; लेखक & gt; जो स्मिथ आर्थर क्लार्क यिर्मयाह राइट & lt; / author & gt; & Lt; / विशेषताओं & gt; & Lt; / मद & gt; & Lt; / जड़ & gt;
क्या यह बेसएक्स के साथ संभव है? यदि नहीं, तो क्या हम ऐसा एक ज्ञात तत्व (उदाहरण के लिए, केवल / root / आइटम / विशेषताओं / लेखक के लिए) कर सकते हैं?
केवल निम्नलिखित भाई-बहनों को सीधे मर्ज करने के लिए सुनिश्चित करने से चीजें थोड़ी सी जटिल हो जाती हैं मैंने कोड को नीचे कैसे काम किया है पर कुछ टिप्पणियां शामिल की हैं।
चलो $ xml: = दस्तावेज़ {& lt; root & gt; & LT; आइटम & gt; & LT; आईडी & gt; 112 & lt; / आईडी & gt; & LT; जिम्मेदार बताते हैं & gt; & Lt; लेखक & gt; जो स्मिथ & lt; / author & gt; & Lt; लेखक & gt; आर्थर क्लार्क & lt; / author & gt; & Lt; लेखक & gt; यिर्मयाह राइट & lt; / author & gt; & LT; foo / & gt; & Lt; लेखक & gt; डोनाल्ड डक & lt; / लेखक & gt; & Lt; / विशेषताओं & gt; & Lt; / मद & gt; & Lt; / root & gt;} वापसी (: एक XQuery अद्यतन परिवर्तन का उपयोग करें :) प्रतिलिपि कॉपी करें: = $ xml संशोधित करें ((:: सभी पत्तों पर लूप (केवल टेक्स्ट नोड्स शामिल हैं। :) (: यदि आप चाहते हैं तो यह समायोजित किया जा सकता है मनमाना नोड्स को मर्ज करने के लिए। $ $ IN $ copy in $ copy // * [not (*)] (: जहां पूर्ववर्ती नोड समान नाम का नहीं है :) (: (क्योंकि यह वैसे भी विलय हो जाएगा) :) जहां नहीं ($ पत्ती / पूर्ववर्ती-साईबलिंग :: * [1 और नाम (।) Eq नाम ($ leaf)]) (: अब निम्नलिखित भाई-बहनों का पता लगाएं ...) $ भाई-बहन दें: $ $ leaf / following-sibling :: * [(: ... नाम का ... :) नाम (।) Eq नाम ($ पत्ती) और (: ... और उसमें दूसरे नाम के साथ एक नोड नहीं है :) नहीं (पूर्ववर्ती- भाई-बहन :: * [नाम (।)! = नाम ($ पत्ती) और $ leaf & lt; & lt।]]] वापसी ((: $ लीज में पाठ सामग्री मर्ज करें) ($ पत्ती, $ भाई-बहन), ''), (: और अन्य सभी हटाना :) नोड्स $ भाई-बहनों को हटा दें)) $ कॉपी लौटें
Comments
Post a Comment