Maintenant, je vais commencer par dire que ceci est en effet une autorisation. J'ai cependant presque terminé cela jusqu'à ce que j'ai couru dans la syntaxe Linq vers XML.
J'ai 2 classes: piste et CD maintenant dans le cadre de l'assidation, je crée un CD, puis a ajouté quelques pistes à elle. Après avoir cherché de nombreux tutoriels qui expliquent parfaitement comment aller de XML aux objets, je ne peux tout simplement pas sembler obtenir ce travail (objets à XML). P>
J'ai actuellement: P>
( from c in cds select new XAttribute("artist",c.getArtist()), select new XAttribute("name", c.getTitle()) //No not happening! ),
3 Réponses :
select new XElement("cd", /*From new to the end of this is the error*/ select new XAttribute("artist",c1.getArtist()), select new XAttribute("name", c1.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()) ) ) ) ) )
Il y a quelques problèmes avec votre construction XDocument.
Essayez ceci (pardonnez-moi de tourner vos getters / Setters dans Propriétés: P>
var xmlOutput = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement( "cds", from cd in cds orderby cd.Artist.ToUpperInvariant() select new XElement( "cd", new XAttribute("title", cd.Title), new XAttribute("artist", cd.Artist), new XElement( "tracks", from t in cd.Tracks select new XElement( "track", new XAttribute("artist", t.Artist), new XAttribute("title", t.Title), new XAttribute("length", t.Length))))));
Tout d'abord, je vous suggère d'utiliser les propriétés et la nommage de style C # pour des méthodes. Voici comment vos cours pourraient être refactorisés:
var xDoc = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("cds", from cd in cds orderby cd.Artist select new XElement("cd", new XAttribute("artist", cd.Artist), new XAttribute("name", cd.Title), from t in cd.Tracks select new XElement("track", new XElement("artist", t.Artist), new XElement("title", t.Title), new XElement("length", t.Length)));
Pourquoi n'utilisez-vous pas simplement la classe
xmlSerializer code>, puis analysez le résultat à un
xdocument code>?
@LukeHennerley Je n'en ai pas entendu parler de cela, l'enseignant exposait ce type de structures.
Cela semble être un bon moyen de poser une question de devoirs. Vous semblez avoir manqué quelle ligne l'exception se produit cependant?
@Sayse j'ai mis à jour la question pour montrer la ligne où elle jette l'exception
Essayez de définir les points d'arrêt sur les sélectionnées imbriquées pour voir si peut le réduire un peu plus ..
@Sayse Je peux mettre 3 points d'arrêt et il ne casse pas sur 'Sélectionner un nouveau xelement ("CD", la deuxième fois avant de jette l'exception.