2009-07-14 13 views
8

मैं एक वर्ग निम्नलिखित गुण है कि है:XElement और सूची <T>

public class Author { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

इसके बाद, मैं तो जैसे लेखकों की एक सूची है:

List<Author> authors = new List<Author>(); 

authors.add(
    new Author { 
    FirstName = "Steven", 
    LastName = "King" 
    }); 

authors.add(
    new Author { 
    FirstName = "Homer", 
    LastName = "" 
    }); 

अब, मैं Linq उपयोग करने के लिए कोशिश कर रहा हूँ एक्सएमएल को मेरे लेखकों की सूची का प्रतिनिधित्व करने के लिए एक्सएमएल में।

new XElement("Authors", 
    new XElement("Author", 
    from na in this.Authors 
    select new XElement("First", na.First))) 

उपरोक्त ब्लॉक एक्सएमएल उत्पन्न नहीं करता है जैसा कि मैं उम्मीद करता हूं। क्या मैं मिलता है:

<Authors> 
    <Author> 
    <First>Steven</First> 
    <First>Homer</First> 
    </Author> 
<Authors> 

मैं XML आउटपुट क्या चाहते हैं की तरह लग रहे करने के लिए है:

<Authors> 
    <Author> 
    <First>Steven</First> 
    <Last>King</Last> 
    </Author> 
    <Author> 
    <First>Homer</First> 
    <Last></Last> 
    </Author> 
</Authors> 

बेहद सराहना की जाएगी करने के लिए कैसे एक्सएमएल प्राप्त करने के लिए देखने के लिए के रूप में मैं इसकी आवश्यकता पर कोई मदद!

उत्तर

11

आप IEnumerable<XElement> क्वेरी दूसरा पैरामीटर के रूप में है, इसलिए पसंद नहीं "लेखक" स्ट्रिंग, पारित करने के लिए की जरूरत है:

// Note the new way to initialize collections in C# 3.0. 
List<Author> authors = new List<Author>() 
{ 
    new Author { FirstName = "Steven", LastName = "King" }), 
    new Author { FirstName = "Homer", LastName = "" }) 
}; 

// The XML 
XElement xml = new XElement("Authors", 
    from na in this.Authors 
    select new XElement("Author", 
     new XElement("First", na.FirstName), 
     new XElement("Last", na.LastName))); 

आप परिणाम आप की जरूरत दे देंगे कि।

2

मुझे पता है कि आप सी # का उपयोग कर रहे हैं, लेकिन यह एक समय है जब आपको अपने समाधान में वीबीएनईटी परियोजना जोड़ने पर गंभीरता से विचार करना चाहिए। एक्सएमएल लिटरेल्स इसके लिए बिल्कुल सही हैं और इसे अधिक आसान बनाते हैं।

अपने लेखक सूची से एक्सएमएल पाने के लिए, यदि आप ऐसा करते हैं:

Function GetAuthorsXML(authors As List(Of Author)) As XElement 
    Return <Authors> 
       <%= from a in authors _ 
        select <Author> 
           <First><%= a.FirstName %></First> 
           <Last><%= a.LastName %></Last> 
          </Author> %> 
      </Authors> 
End Function 
+1

एक * होने पूरी तरह से अलग परियोजना * सिर्फ एक्सएमएल जादू का एक छोटा सा के लिए सबसे अच्छे रूप में अत्यधिक है। जब तक कि एक्सएमएल ट्रांसफॉर्मेशन की जबरदस्त मात्रा नहीं होती है (और अधिक जटिल प्रकृति), एक और असेंबली जोड़ना (जब तक कि आप मॉड्यूल को संकलित नहीं करना चाहते हैं और फिर उन्हें एक साथ बुनाई करते हैं, जो एक और पिटा है) बस बहुत अधिक ओवरहेड जोड़ रहा है कई क्षेत्रों में। – casperOne

+1

बेशक, अगर यह एकमात्र बिट था, तो यह अत्यधिक होगा। लेकिन यह अभी भी सी # डेवलपर के लिए मूल्यवान है यह जानना कि यह .NET में मौजूद है। और मैंने कभी ऐसी प्रणाली पर काम नहीं किया है जिसमें कई छोटी परियोजनाएं नहीं हैं, इसलिए एक्सएमएल जादू को संभालने के लिए एक को जोड़ना मुझे समझ में आता है। – CoderDennis