Şimdi bunun gerçekten bir ödev olduğunu söyleyerek başlayacağım. Ancak Linq'den XML sözdizimine geçene kadar neredeyse bitirdim.XML için LINQ - XDocument'i doğru şekilde nasıl kullanırsınız?
2 sınıfım var: Parça ve CD şimdi bir cd olarak oluşturdum ve bir parça oluşturdum. Xml'den nesnelere nasıl gidileceğini mükemmel bir şekilde açıklayan çok sayıda öğretici aradıktan sonra, bu çalışmayı (xml nesnelerini) elde edemiyorum.
Şu anda var:
//My list of cds
List<CD> cds = new List<CD>();
//Make a new CD and add some tracks to it
CD c1 = new CD("Awake","Dream Theater");
Track t1 = new Track("6:00", "Dream Theater", new TimeSpan(00, 05, 31));
Track t2 = new Track("Caught in a Web", "Dream Theater", new TimeSpan(00, 05, 28));
Track t3 = new Track("Innocence Faded", "Dream Theater", new TimeSpan(00, 05, 34));
c1.addTrack(t1);
c1.addTrack(t2);
c1.addTrack(t3);
cds.Add(c1);
//Make another cd and add it
CD c2 = new CD("Second cd","TestArtist");
Track t4 = new Track("TrackForSecond","TestArtist",new TimeSpan(00,13,37));
c2.addTrack(t4);
cds.add(c2);
Şimdi bu bana XML içine koymak gerekir nesneleri alır budur. XML bölümüne:
XDocument xmlOutput = new XDocument (
new XDeclaration("1.0","utf-8","yes"),
(from cl in cds orderby cl.getArtist()
select new XElement("cd", /*From new to the end of this is the error*/
(
from c in cds
select new XAttribute("artist",c.getArtist())
),
(
from c in cds
select new XAttribute("name", c.getTitle())
),
new XElement("tracks",
(
from t in c1.getTracks()
select new XElement("track",
new XElement("artist",t1.getArtist()),
new XElement("title",t1.getTitle()),
new XElement("length",t1.getLength())
)
)
)
)
)
);
Console.WriteLine(xmlOutput);
Sadece 1 cd için bu harika çalışıyor (ihtiyacım olan sonucu alır!). Başka bir cd eklemeye karar verdiğimde, o, XDocument öğesinde işaret etmektedir. Kenara gelen bu o (CD'ler x2 c itibaren) güzel aptal hissediyor ama benden nefret bu sözdizimi durdurmak için görünmüyor olabilir denemek olursa olsun çalışmıyor:
(
from c in cds
select new XAttribute("artist",c.getArtist()),
select new XAttribute("name", c.getTitle()) //No not happening!
),
Sağlayabilir herhangi yardımıyla çok mutlu olurdu!
Neden sadece 'XmlSerializer' sınıfını kullanmayın ve daha sonra bir' XDocument' sonucu ayrıştırmak? Bu konuda duymadım – LukeHennerley
@LukeHennerley, öğretmen yapılarının bu tür görüntüleniyor oldu. –
Bu ödev soru sormak için iyi bir yol gibi gözüküyor .. Eğer istisna olsa üzerinde oluştuğunu çizgi ne kaçırmış görünüyor? – Sayse