Posiadam xml o takiej strukturze (na cele edukacyjne zmieniona zawartość ;))
<?xml version="1.0" encoding="UTF-8"?>
<trasy>
<trasa nrTrasy = "1">
<nazwaTrasy>Trasa1</nazwa>
<Punkt nrPunktu = "1">
<nazwaPunktu>Warszawa </nazwaPunktu>
<czasPobytu>10</czasPobytu>
</Punkt>
<Punkt nrPunktu = "2">
<nazwaPunktu>Gdynia </nazwaPunktu>
<czasPobytu>15</czasPobytu>
</Punkt>
<Punkt nrPunktu = "3">
<nazwaPunktu>Gdansk </nazwaPunktu>
<czasPobytu>5</czasPobytu>
</Punkt>
</trasa>
<trasa nrTrasy = "2">
<nazwaTrasy>Trasa2</nazwa>
<Punkt nrPunktu = "1">
<nazwaPunktu>Krakow </nazwaPunktu>
<czasPobytu>10</czasPobytu>
</Punkt>
<Punkt nrPunktu = "2">
<nazwaPunktu>Zakopane </nazwaPunktu>
<czasPobytu>15</czasPobytu>
</Punkt>
<Punkt nrPunktu = "3">
<nazwaPunktu>Kielce </nazwaPunktu>
<czasPobytu>5</czasPobytu>
</Punkt>
</trasa>
</trasy>
Do tego w programie mam dwie klasy
public class Trasa
{
public int nrTrasy { get; set; }
public string nazwaTrasy { get; set; }
list<Punkt> listaPunktow;
public Trasa(int nrTrasy , string nazwaTrasy , list<Punkt> listaPunktow)
{
this.nrTrasy = nrTrasy ;
this.nazwaTrasy = nazwaTrasy ;
this.listaPunktow = listaPunktow;
}
}
public class Punkt
{
public int nrPunktu { get; set; }
public string nazwaPunktu { get; set; }
public int czasPobytu { get; set; }
public Punkt(int nrPunktu , string nazwaPunktu , int czasPobytu )
{
this.nrPunktu = nrPunktu ;
this.nazwaPunktu = nazwaPunktu ;
this.czasPobytu = czasPobytu ;
}
}
Chciałbym w klasie czytającej Xml stworzyć listę tras
public XmlReader
{
public List<Trasa> GetXml()
{
XDocument xml = XDocument.Load("dane.xml");
List<Trasa> trasa = (
from trasa in xml.Root.Elements("trasa")
select new Trasa(
int.Parse(trasa.Attribute("nrTrasy").Value),
trasa.Element("nazwaTrasy").Value
).ToList<Trasa>();
return trasa;
}
}
Edit:
Edytowałem zarówno xml jak i klasy i metodę. Teraz przypomina bardziej założenie tego co mam zrobić i ma chyba większy sens niż przykład ze zwierzętami.
Jak za pomocą XDocument to zrobić?
Bo o ile wyciągnięcie nrTrasy i nazwy dla trasy, co jest w kodzie wyżej, tylko należy wtedy z konstruktora wywalić listę punktow, to nie potrafię dostać się do bardziej zagnieżdżonych elementów.
W jaki sposób można to rozwiązać?
Albo inaczej jak podejść do problemu żeby z takiego xml'a wyciągnąć trasy i żeby każda z tras miała oprócz atrybutu i nazwy listę punktów z wartościami danych punktów?