xml - How to find the level of a specific Node -
मेरी XML:
& lt; मेनू & gt; & Lt; आइटम आईडी = 1 & gt; & Lt; आइटम आईडी = 1.1 & gt; & Lt; आइटम आईडी = 1.1.1 & gt; & Lt; आइटम आईडी = 1.1.1.1 & gt; & Lt; आइटम आईडी = 1.1.1.2 & gt; & Lt; आइटम आईडी = 1.1.1.3 & gt; & Lt; / मद & gt; & Lt; / मद & gt; & Lt; आइटम आईडी = 1.2 & gt; & Lt; आइटम आईडी = 1.2.1 & gt; & Lt; आइटम आईडी = 1.2.1.1 & gt; & Lt; आइटम आईडी = 1.2.1.2 & gt; & Lt; आइटम आईडी = 1.2.1.3 & gt; & Lt; / मद & gt; & Lt; / मद & gt; & Lt; / मद & gt; & Lt; / मेनू & gt; और मेरा XSLT:
& lt; xsl: स्टाइलशीट संस्करण = "1.0" xmlns: xsl = "http://www.w3.org/ 1999 / XSL / रूपांतरण "& gt; & lt; xsl: आउटपुट पद्धति = "xml" संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8" इंडेंट = "हां" / & gt; & lt; xsl: स्ट्रिप-स्पेस तत्व = "*" / & gt; & Lt; xsl: परम नाम = "मेनूआईडी" / & gt; & Lt; xsl: टेम्पलेट मैच = "*" & gt; & Lt; xsl: if test = "वंशज-या-आत्म :: * [@ आईडी = $ मेनूइंड]" & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: copy-of select = "@ *" / & gt; & Lt; xsl: लागू-टेम्पलेट / & gt; & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: यदि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; xsl: टेम्पलेट मैच = "आइटम" & gt; & lt; xsl: if test = "वंशज- या-स्व :: * [@ id = $ menuId] | अभिभावक :: * [@ आईडी = $ menuId] | पूर्ववर्ती- sibling :: * [@ id = $ menuId] | निम्नलिखित-साइबलिंग :: * [@ id = $ menuId] | पूर्ववर्ती-साईबलिंग :: * / child :: * [@ id = $ menuId] | निम्न भाई-बहन :: * / child :: * [@ id = $ menuId ] "& gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: copy-of select = "@ *" / & gt; & Lt; xsl: लागू-टेम्पलेट चुनें = "आइटम" / & gt; & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: यदि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; / XSL: स्टाइलशीट & gt; मैं सिर्फ एक विशिष्ट नोड पाने के लिए कुछ नियम लागू कर रहा हूं। ठीक है। लेकिन अब मुझे चयनित मेनू आईडी से ऊपर एक्स (यह संख्या भिन्न हो सकती है) स्तर प्राप्त करने की आवश्यकता है
उदाहरण के लिए अगर एक्स स्तर की संख्या 2 है और मेनूइंड 1.1.2.3 है तो इसका परिणाम होगा:
& lt; मेनू & gt; & Lt; आइटम आईडी = 1.1 & gt; & Lt; आइटम आईडी = 1.1.1 & gt; & Lt; आइटम आईडी = 1.1.1.1 & gt; & lt; आइटम आईडी = 1.1.1.2 & gt; & Lt; आइटम आईडी = 1.1.1.3 & gt; & Lt; / मद & gt; & Lt; / मद & gt; & Lt; आइटम आईडी = 1.2 & gt; & Lt; / मद & gt; & Lt; / मेनू & gt; यदि एक्स स्तर की संख्या 1 है, तो इसका परिणाम होगा:
& lt; मेनू & gt; & Lt; आइटम आईडी = 1.1.1 & gt; & Lt; आइटम आईडी = 1.1.1.1 & gt; & Lt; आइटम आईडी = 1.1.1.2 & gt; & Lt; आइटम आईडी = 1.1.1.3 & gt; & Lt; / मद & gt; & Lt; / मेनू & gt; मौजूदा स्तर प्राप्त करने के लिए मैं count (पूर्वज :: *) का उपयोग करेगा। लेकिन मुझे नहीं पता कि नोड कैसे प्राप्त करें [@id = $ menuId] स्तर मुझे गिनती (पूर्वज :: *) & gt; = (गिनती (पूर्वज :: नोड [@id = $ menuId]) जैसे कुछ को शामिल करने की आवश्यकता है - एक्स) मेरे अंदर धन्यवाद।
सबसे प्रभावी तरीके से मैं यह दृष्टिकोण करने के लिए सोच सकता हूँ नीचे एक गिनती पैरामीटर पास होगा लागू-टेम्पलेट श्रृंखला: & lt; xsl: variable name = "targetDepth" select = "count (// आइटम [@ id = $ menuId] / पूर्वज :: आइटम) "/ & gt; & Lt;! - मैंने इसे बहुत विस्तार से नहीं सोचा है, इसे 1 - & gt; & Lt; xsl: टेम्पलेट मैच = "आइटम" & gt; & Lt; xsl: परम नाम = "गहराई" चुनें = "0" / & gt; .... & lt; xsl: if test = ".... और ($ लक्ष्य डीपथ - $ गहराई) & amp; लिफ्ट; = $ numllyvels & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: copy-of select = "@ *" / & gt; & Lt; xsl: लागू-टेम्पलेट चुनें = "आइटम" & gt; & Lt; xsl: साथ-परम नाम = "गहराई" चुनें = "$ गहराई + 1" / & gt; & Lt; / XSL: लागू-टेम्पलेट्स & gt; & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: यदि & gt; & Lt; / XSL: टेम्पलेट & gt;
जावा कंप्यूटर प्रोग्रामिंग शौकिया कोडर्स के लिए उदाहरण है
ReplyDeleteउदाहरण कोड XML क्लाइंट