XDocument.Load, wczytywanie tablicy typu int

XDocument.Load, wczytywanie tablicy typu int
AR
  • Rejestracja:prawie 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:2
0

Piszę małą aplikację i napotkałem problem, dość spory bo męczę się od 2 dni a i w sieci nie znalazłem żadnych konkretnych podpowiedzi.

Kopiuj
<ArrayOfDyzur>
  <Dyzur>
    <peselPracownika>9509060230</peselPracownika>
    <listaDyzurow>
      <int>1</int>
      <int>3</int>
      <int>5</int>
      <int>7</int>
      <int>9</int>
      <int>11</int>
    </listaDyzurow>
  </Dyzur>
</ArrayOfDyzur>

Z takiego pliku typu XML potrzebuję wczytać dane by móc je przekazać do konstruktora obiektu.

Kopiuj
            XDocument xml4 = XDocument.Load("listDate.xml");

            List<Dyzur> listaDat = (
                from Dyzur in xml4.Root.Elements("Dyzur")
                select new Dyzur(
                    Dyzur.Element("peselPracownika").Value,
                    Dyzur.Elements("int").ToArray(typeof(int)) <- jak się domyślacie nie działa
                    )
                ).ToList<Dyzur>();

Z pierwszą wartością (pesel) nie mam problemu natomiast jak to zrobić z tablicą. W jaki sposób wyciągnąć z XML od razu tablicę typu int ?
Wiem, że zamiast XML baza danych byłaby lepszym rozwiązaniem, ale tym razem wchodzi w grę tylko XML, taki wymóg.
Będę wdzięczny za jakieś podpowiedzi ;)

PH
  • Rejestracja:prawie 8 lat
  • Ostatnio:7 dni
  • Postów:185
0

Ale to wyrzuca błąd w tym miejscu gdzie pokazałeś?
Spróbuj convert.toInt32()
Ewentualnie wczytaj jako string i sprawdź czy działa wczytywanie, może to z nim jest problem

PH
Ewentualnie może musisz się odwołać najpierw do lista dyżurów a dopiero później do int. Czyli dyżur.element("lista dyżurów").elements(int).toaray
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 24 godziny
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
2

Skąd się to bierze, że ludzie coraz częściej bawią się w ręczne parsowanie XMLa? To jakaś plaga na studiach? Domyślam się, że na tym poziomie mało kto wie, że można to zrobić prościej i szybciej.

Kopiuj
public class Dyzur
{
   public string peselPracownika {get;set;}
   public List<int> listaDyzurow {get;set;}
}

Wystarczy parę linijek, bez linq, bez głupot

Kopiuj
string xml = "XML_STRING";
var serializer = new XmlSerializer(typeof(List<Dyzur>));
using (TextReader reader = new StringReader(xml))
{
    var result = (List<Dyzur>)serializer.Deserialize(reader);
}

PS.
Kod z głowy. Nie mam pojęcia czy gdzieś błędu nie zrobiłem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.