सार्वजनिक संरचना पैरामीटर {सार्वजनिक पैरामीटर (स्ट्रिंग का नाम, स्ट्रिंग टाइप, स्ट्रिंग कैरिएटिप) {this.Name = name; This.Type = प्रकार; यह। ParentType = parentype; } सार्वजनिक स्ट्रिंग नाम; सार्वजनिक स्ट्रिंग प्रकार; सार्वजनिक स्ट्रिंग पैरेन्ट टाइप; } निम्नलिखित मान पैरामीटर की सरणी में संग्रहीत किए गए हैं:
नाम का प्रकार ParentType --------------- ------------------------- एक और टाइप टाइप करें अन्य कॉम्पोझिट टाइप टाइप करें संमिश्र टाइप स्ट्रिंग एक और कॉम्पोसाइट टाइप स्टार्टडेट डेट अन्य कॉम्पोसाइट टाइप मैं इसे एक एक्सएमएल बनाने के लिए पढ़ना चाहता हूं। कुछ ऐसा: <पूर्व> & lt; composite & gt; & LT; BoolValue & gt; बूलियन & lt; / BoolValue & gt; & LT; StringValue & gt; स्ट्रिंग & lt; / StringValue & gt; & LT; AnotherType & gt; & LT; खाता & gt; स्ट्रिंग & lt; / खाता & gt; & LT; StartDate & gt; तारीख & lt; / StartDate & gt; & Lt; / AnotherType & gt; & LT; समग्र & gt; & LT; isThisTest & gt; बूलियन & lt; / isThisTest & gt;
मैं मान पढ़ने के लिए निम्न तर्क का उपयोग कर रहा हूं:
foreach (मापदंडों में पैरामीटर पैरामीटर) {sb.Append ("& lt;" + पैरामीटर .नाम + "& gt;"); // यहां: पेरेन्टेपे की जांच करने और इसके सभी बच्चे तत्व // sb.Append ("& lt; /" + parameter.Name + "& gt;" + CrLf) प्राप्त करने की आवश्यकता है; } क्या माता-पिता और बच्चे को पाने के लिए सरणी को पढ़ने का एक आसान तरीका है? LINQ का प्रयोग हो सकता है? मैं अभी भी 3.5 नेट पर है। उदाहरण के कोड के साथ किसी भी सुझाव की सराहना करें:)
आप इस से निपटने के लिए एक छोटी पुनरावर्ती विधि लिख सकते हैं: < / P>
IEnumerable & lt; XElement & gt; GetChildren (स्ट्रिंग रूट टाइप, सूची & lt; पैरामीटर & gt; पैरामीटर) {मापदंडों में पी से वापसी, जहां p.ParentType == रूट टाइप करें, बच्चों को मिलता है = बच्चों को मिलता है (पी। टाइप, पैरामीटर) बच्चों का चयन करें। गणना () == 0? नया XElement (पी। नाम, पी। टाईप): नया एक्सईलेमेंट (पी। नाम, बच्चों); } प्रत्येक कॉल एक अनगृहीत बनाता है जिनमें से पैरामीटर में पैरामीटर हैं जिनके अभिभावक में पास प्रकार हैं प्रत्येक तत्व के लिए बच्चों को फिर से ढूंढने के लिए विधि में फिर से चयन किया जाता है
ध्यान दें कि यह मानता है कि डेटा सही ढंग से बना है। यदि दो मापदंडों में माता-पिता के रूप में एक-दूसरे को रखा गया है, तो आपको स्टैक ओवरफ्लो मिलेगा।
जादू XElements वर्ग (लिनक टू एक्सएमएल) में है जो एक्सईलेमेंट्स की एक्समेलेटमेंट्स को एक्सएमएल स्ट्रक्चर जैसे पेड़ को बनाने के लिए स्वीकार करता है।
रूट कॉल के रूप में पहली कॉल, पास नल (या सी # 4 का उपयोग करते समय डिफ़ॉल्ट पैरामीटर का उपयोग करें) जैसे प्रयोग करें:
शून्य मुख्य () {var पैरामीटर = नई सूची & lt; पैरामीटर & gt; नया पैरामीटर {name = "composite", type = "composite type"}, नया पैरामीटर {name = "is isTest", प्रकार = "बूलियन"}, नया पैरामीटर {name = "boolvalue", type = "boolean", parenttype = "कंपोजिट टाइप"}, नया पैरामीटर {नाम = "स्ट्रिंगवैल्यू", प्रकार = "स्ट्रिंग", पेरेन्टटाइप = "कम्पोजिट टाइप"}, नया पैरामीटर {नाम = "अन्य टाइप", प्रकार = "अन्यसंचार प्रकार", पेरेंट टाइप = "समग्र टाइप"}, नया पैरामीटर {नाम = "खाता", प्रकार = "स्ट्रिंग", पेरेन्टटाइप = "अन्यकंपोझिट टाइप"}, नया पैरामीटर {name = "startdate", प्रकार = "दिनांक", पेरेन्टटाइप = "अन्यकंपोझिट टाइप"}}; फॉरचाच (GetChildren में var r (शून्य, पैरामीटर)) {Console.WriteLine (r); }} आउटपुट:
& lt; composite & gt; & LT; BoolValue & gt; बूलियन & lt; / BoolValue & gt; & LT; StringValue & gt; स्ट्रिंग & lt; / StringValue & gt; & LT; AnotherType & gt; & LT; खाता & gt; स्ट्रिंग & lt; / खाता & gt; & LT; StartDate & gt; तारीख & lt; / StartDate & gt; & Lt; / AnotherType & gt; & Lt; / समग्र & gt; & LT; isThisTest & gt; बूलियन & lt; / isThisTest & gt; आपकी टिप्पणी के जवाब में, XElement आपको स्ट्रिंग के रूप में आउटपुट के लिए दो विकल्प देता है।
आउटपुट स्वरूपित एक्सएमएल होगा।
आपको स्वरूपित या अपरिवर्तित आउटपुट के साथ-साथ डुप्लिकेट नामस्थानों को भी निर्दिष्ट करने की अनुमति देता है।
मुझे यकीन है कि आप वास्तव में स्ट्रिंगबइल्डर का उपयोग करने के लिए समाधान अनुकूलित कर सकते हैं यदि आप वास्तव में था, हालांकि यह शायद सुरुचिपूर्ण नहीं होगा ..
Comments
Post a Comment