2009-07-28 12 views
7

मैं एक वर्ग प्रोफ़ाइल कुछ सरल गुण है कि कहा जाता है और फिर इसे ProfileItem फिर कुछ सरल गुण है कि का एक संग्रह कर सकते हैं और फिर इसे ProfileItem (प्रत्यावर्तन) का एक संग्रह हो सकता है।वीबी.नेट में एक्सएमएल लिटल्स के साथ रिकर्सन संभव है?

अब मैं वीबीएनईटी (3.5) के साथ आने वाले एक्सएमएल लिटलल्स का उपयोग करके एक बहुत ही सरल बचत कार्य उत्पन्न करने की कोशिश कर रहा हूं।

कोड मैं का उपयोग कर रहा है निम्नलिखित:

Dim xdoc As XDocument = _ 
      <?xml version="1.0" encoding="utf-8"?> 
      <profiles> 
       <%= _ 
        From p In _Profiles _ 
        Select <profile name=<%= p.Name %>> 
           <%= _ 
            From i In p.GetProfileItems _ 
            Select <item> 
               <name><%= i.Name %></name> 
               <action><%= i.Action.ToString %></action> 
               <type><%= i.Type.ToString %></type> 
               <arguments><%= i.Arguments %></arguments> 
               <dependencies> 
                <%= _ 
                 From d In i.GetDependencies _ 
                 Select <dependency> 
                   <name><%= d.Name %></name> 
                  </dependency> _ 
                %> 
               </dependencies> 
              </item> _ 
           %> 
          </profile> _ 
       %> 
      </profiles> 

टैग से संबंधित भाग पुनरावर्ती हो जाना चाहिए, लेकिन अगर यह किसी तरह से इस वाक्य रचना के द्वारा समर्थित है मैं नहीं जानता।

क्या मुझे रिकर्सन लागू करने के लिए एक्सएमएल लिटल के सभी से बचने के उपयोग को फिर से लिखना चाहिए?

+0

वाह सी # एक्सएमएल अक्षरों को करने के बाद बस सही दिखने या महसूस नहीं करते हैं। –

उत्तर

9

रिकर्सन उन कारणों में से एक है जिन्हें मैं वीबी.नेट एक्सएमएल लिटल्स से प्यार करता हूं!

रिकर्सन करने के लिए, आपको एक ऐसा फ़ंक्शन चाहिए जो प्रोफाइलइटम संग्रह स्वीकार करता है और XElement देता है। फिर आप अपने एक्सएमएल लिटलल के अंदर उस फ़ंक्शन को रिकर्सिव कॉल कर सकते हैं।

इसके अलावा, काम करने के लिए रिकर्सन के लिए, GetProfileItems और GetDependencies को एक ही नाम होना चाहिए (उनमें से एक का नाम बदलें) और उसी एक्सएमएल एलिमेंट स्ट्रक्चर के साथ प्रदर्शित करें।

Function GetProfileItemsElement(ByVal Items As List(Of ProfileItem) As XElement 
    Return <items> 
       <%= From i In Items _ 
        Select <item> 
           <name><%= i.Name %></name> 
           <!-- other elements here --> 
           <%= GetProfileItemsElement(i.GetDependencies) %> 
          </item> %> 
      </items> 
End Function 

प्रत्यावर्तन जब आप किसी आइटम कि GetDependencies समारोह के लिए एक खाली सूची रिटर्न के लिए मिलता है खत्म हो जाएगा: यहाँ क्या पुनरावर्ती क्रिया नज़र आ सकते हैं। उस स्थिति में, नेस्टेड items तत्व खाली होगा: <items/>। एक्सएमएल लिटरेल्स शुरुआती और अंत items टैग को गठबंधन करने के लिए पर्याप्त स्मार्ट हैं जब कोई बच्चा तत्व नहीं होता है।

+0

महान डेनिस, आपके उत्तर ने मुझे बहुत मदद की – Drake

संबंधित मुद्दे