سؤال

لدي فئة تحتوي على الخصائص التالية:

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 إلى XML من أجل إنشاء XML يمثل قائمة مؤلفيي.

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

الكتلة أعلاه لا تولد XML كما أتوقع ذلك. ما أحصل عليه هو:

<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>

أي مساعدة حول كيفية الحصول على XML لتبدو لأنني في حاجة إليها ستكون موضع تقدير كبير!

هل كانت مفيدة؟

المحلول

تحتاج إلى اجتياز 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)));

هذا سوف يمنحك النتيجة التي تحتاجها.

نصائح أخرى

أعلم أنك تستخدم C #، ولكن هذا مرة واحدة عندما يجب أن تفكر بجدية في إضافة مشروع VB.NET إلى الحل الخاص بك. حرفي XML مثالي لهذا الغرض وجعله أسهل بكثير.

للحصول على XML من قائمة المؤلفات الخاصة بك، سوف تفعل هذا:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top