Teraz zacznę od stwierdzenia, że to rzeczywiście jest przypisanie. Jednak prawie skończyłem go, aż wpadłem na składnię Linq do XML.LINQ to XML - Jak korzystać z XDocument we właściwy sposób
Mam 2 klasy: Track i CD teraz w ramach przypisania Tworzę płytę CD, a następnie dodałem do niej kilka ścieżek. Po wyszukaniu wielu tutoriali, które wyjaśniłyby doskonale, jak przejść z xml do obiektów, po prostu nie mogę uzyskać tego działającego (obiekty do xml).
Obecnie mam:
//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);
Teraz to, co dostaje mi przedmioty muszę umieścić na XML. Część XML to:
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);
Działa to świetnie (daje mi wynik, którego potrzebuję!) Za jedyne 1 cd. Kiedy decyduję się dodać kolejną płytę CD, pokazuje:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.Linq.dll
Duplicate Attribute (cd)
Wskazuje na XDocument. Poza tym nie działa ona czuje się całkiem głupi (od c CDS x2), ale cokolwiek próbuję Nie mogę się powstrzymać tę składnię od nienawidzących mnie:
(
from c in cds
select new XAttribute("artist",c.getArtist()),
select new XAttribute("name", c.getTitle()) //No not happening!
),
byłby bardzo zadowolony z jakiejkolwiek pomocy można zapewnić!
Dlaczego po prostu nie użyjesz klasy 'XmlSerializer', a następnie przeanalizuje wynik do' XDocument'? – LukeHennerley
@LukeHennerley Nie słyszałem o tym, nauczyciel wyświetlał tego rodzaju struktury. –
To wydaje się być dobrym sposobem zadawania pytań o pracę domową. Wygląda na to, że przegapiłeś linię, na której pojawia się wyjątek. – Sayse