xml - xsl to only copy some elements recursively and remove some of the descendants -


मुझे बदलना

  & lt;? Xml संस्करण = "1.0"? & Gt; ; & LT; mydoc & gt; & LT; फ़ाइल & gt; & LT; रंग & gt; & Lt; नीली / & gt; & Lt; red / & gt; & Lt; हरा / & gt; & Lt; / रंग & gt; & LT; गुप्त & gt; & Lt; उपयोगकर्ता नाम / & gt; & Lt; पासवर्ड / & gt; & Lt; / गुप्त & gt; & Lt; / फ़ाइल & gt; & Lt; / mydoc & gt;   

में

  & lt;? Xml संस्करण = "1.0"? & Gt; & LT; रंग & gt; & Lt; नीली / & gt; & Lt; red / & gt; & Lt; / रंग & gt; सादा अंग्रेजी में, मैं पाठ सहित, रंग तत्वों की प्रतिलिपि करना चाहता हूं, बाकी के XML दस्तावेज़ को अनदेखा करना और हरे रंग की तत्व को त्यागना चाहूंगा।  

उपर्युक्त उदाहरण के साथ काम करने वाले समाधान हैं, लेकिन यदि असफल हो जाये तो एक्सएमएल थोड़ी-थोड़ी भिन्न हो सकता है। उदाहरण के लिए घोंसले तत्व रंग तत्व, या अन्य तत्व जो रंग < / मजबूत> तत्व, या पाठ जो कि रंग तत्व (GOOD TEXT) के दायरे में है और दूसरा जो उसके दायरे (बैड टेक्स्ट) के बाहर है।

  & lt ;? Xml संस्करण = "1.0"? & Gt; & LT; mydoc & gt; & LT; फ़ाइल & gt; & LT; रंग & gt; & LT; घोंसला & gt; & Lt; नीली / & gt; & Lt; red / & gt; & Lt; हरा / & gt; & Lt; / घोंसला & gt; अच्छा पाठ & lt; / colors & gt; & LT; गुप्त & gt; & Lt; उपयोगकर्ता नाम / & gt; & Lt; पासवर्ड / & gt; & Lt; / गुप्त & gt; बैड टेक्स्ट & lt; / file & gt; & Lt; अन्य & gt; बैड टेक्स्ट दो & lt; / अन्य & gt; & Lt; / mydoc & gt;   

मुझे एक समाधान में सबसे अधिक दिलचस्पी है जो सामान्य और यहां प्रस्तुत उदाहरणों के लिए अनुकूलित नहीं है।

यह नया परिवर्तन सामान्य रूप से रंग तत्वों जो उनके माता पिता है कॉपी करने के लिए पर्याप्त है

  & lt; xsl: स्टाइलशीट संस्करण = "1.0" xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" & gt; & Lt; xsl: आउटपुट इंडेंट = "हां" / & gt; & Lt; xsl: स्ट्रिप-स्पेस तत्व = "*" / & gt; & Lt; xsl: टेम्पलेट मैच = "/ mydoc / file / colors" & gt; & Lt; xsl: variable name = "colors_parent" चुनें = "स्थानीय-नाम (.// green / parent :: *)" / & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: copy-of select = ".//* [स्थानीय-नाम () = $ colors_parent] / * [नहीं (स्वयं :: हरा)]" /> & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "टेक्स्ट ()" / & gt; & Lt; / XSL: स्टाइलशीट & gt;   

मैंने सभी संभव टेक्स्ट तत्वों को भी शामिल नहीं किया है यह अभी भी स्पष्ट नहीं है अगर आप "अच्छा पाठ" पाठ नोड रखना चाहते हैं हालांकि अब आपके लिए नई आवश्यकताओं के लिए रूपांतरण को अनुकूलित करना बहुत आसान होना चाहिए। उदाहरण के लिए यदि आप रंग तत्व के नीचे किसी भी पाठ नोड को रखना चाहते हैं तो आप इस परिवर्तन का उपयोग कर सकते हैं:

  & lt; xsl: stylesheet version = "1.0" xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" & gt; & Lt; xsl: आउटपुट इंडेंट = "हां" / & gt; & Lt; xsl: स्ट्रिप-स्पेस तत्व = "*" / & gt; & Lt; xsl: टेम्पलेट मैच = "/ mydoc / file / colors" & gt; & Lt; xsl: variable name = "colors_parent" चुनें = "स्थानीय-नाम (.// green / parent :: *)" / & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: copy-of select = ".//* [स्थानीय-नाम () = $ colors_parent] / * [नहीं (स्वयं :: हरा)] | .//text()"/> & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "टेक्स्ट ()" / & gt; & Lt; / XSL: स्टाइलशीट & gt;   

पहचान नियम का उपयोग (यह नेस्ट तत्व की प्रतिलिपि बनाता है)

  & lt; xsl: stylesheet version = " 1.0 "xmlns: xsl =" http://www.w3.org/1999/XSL/Transform "& gt; & Lt; xsl: आउटपुट इंडेंट = "हां" / & gt; & Lt; xsl: स्ट्रिप-स्पेस तत्व = "*" / & gt; & Lt; xsl: टेम्पलेट मैच = "नोड () | @ *" & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: लागू-टेम्पलेट चुनें = "नोड () | @ *" / & gt; & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "मायडॉक" & gt; & Lt; xsl: लागू-टेम्पलेट चुनें = "फ़ाइल / रंग" / & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "हरा" / & gt; & Lt; / XSL: स्टाइलशीट & gt;    

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -