/// <summary> /// Gets the xml representation of a car /// </summary> /// <param name="registrationNumber">The registration number of the car to get</param> /// <returns>An XDocument representing the car</returns> private async Task<XDocument> GetXmlDocumentAsync(RegistrationNumber registrationNumber) { var client = new HttpClient(); var xmlString = await client.GetStringAsync(SvvBaseUriString + registrationNumber); return XDocument.Parse(xmlString); }
public async Task<Car> GetCarAsync(RegistrationNumber registrationNumber) { var xDoc = await GetXmlDocumentAsync(registrationNumber); var returnCar = new Car() { Registreringsnummer = registrationNumber, Motor = new Engine() }; foreach (var i in xDoc.Descendants()) { switch (i.Name.LocalName) { case "tidspunkt": var tidspunktString = i.Value.Split('.'); if(tidspunktString.Length == 3) returnCar.Tidspunkt = new DateTime(int.Parse(tidspunktString[2]), int.Parse(tidspunktString[1]), int.Parse(tidspunktString[0])); break; case "nesteOppdatering": var nesteOppdateringString = i.Value.Split('.'); if (nesteOppdateringString.Length == 3) returnCar.NesteOppdatering = new DateTime(int.Parse(nesteOppdateringString[2]), int.Parse(nesteOppdateringString[1]), int.Parse(nesteOppdateringString[0])); break; case "merke": returnCar.Merke = i.Value; break; case "modell": returnCar.Modell = i.Value; break; case "type": returnCar.Type = i.Value; break; case "gruppe": returnCar.Brukstypegruppe = i.Value; break; case "ikon": returnCar.Brukstypeikon = i.Value.Split(',').Last(); break; case "farge": returnCar.Farge = i.Value; break; case "kanBeregnes": returnCar.Kjoretoysklasse = Regex.Match(i.Elements().First().Name.LocalName, "[A-Z]+").Value; break; case "seter": int seterCount; if (int.TryParse(i.Value, out seterCount)) returnCar.Seter = seterCount; break; case "staaplasser": int staaplasserCount; if (int.TryParse(i.Value, out staaplasserCount)) returnCar.Staaplasser = staaplasserCount; break; case "drivstofftype": returnCar.DrivstoffType = i.Value; break; case "slagvolum": var slagvolumElements = i.Elements(); int slagvolumCount, literCount; if(int.TryParse(slagvolumElements.First().Value, out slagvolumCount)) returnCar.Motor.SlagVolum = slagvolumCount; if(int.TryParse(slagvolumElements.Last().Value, out literCount)) returnCar.Motor.Liter = literCount; break; case "motorytelse": foreach (var j in i.Elements()) { switch (j.Name.LocalName) { case "oppgitt": int motorYtelseCount; if(int.TryParse(j.Value, out motorYtelseCount)) returnCar.Motor.MotorYtelse = motorYtelseCount; break; case "oppgittBenevning": returnCar.Motor.MotorYtelseBenevning = j.Value; break; case "hestekrefter": int hesteKrefterCount; if(int.TryParse(j.Value, out hesteKrefterCount)) returnCar.Motor.HesteKrefter = hesteKrefterCount; break; default: break; } } break; case "akslerMedDrift": int akslerMedDriftCount; if (int.TryParse(i.Value, out akslerMedDriftCount)) returnCar.AkslerMedDrift = akslerMedDriftCount; break; case "egenvektMedForer": int egenvektMedForerCount; if (int.TryParse(i.Value, out egenvektMedForerCount)) returnCar.EgenvektMedForer = egenvektMedForerCount; break; case "tilhengervektMBrems": int tilhengervektMedBremsCount; if (int.TryParse(i.Value, out tilhengervektMedBremsCount)) returnCar.TilhengervektMedBrems = tilhengervektMedBremsCount; break; case "tilhengervektUBrems": int tilhengervektUtenBremsCount; if (int.TryParse(i.Value, out tilhengervektUtenBremsCount)) returnCar.TilhengervektUtenBrems = tilhengervektUtenBremsCount; break; case "tilhengervektKopl": int tilhengervektKoplingCount; if (int.TryParse(i.Value, out tilhengervektKoplingCount)) returnCar.TilhengervektKopling = tilhengervektKoplingCount; break; case "vogntogvekt": int vogntogvektCount; if (int.TryParse(i.Value, out vogntogvektCount)) returnCar.Vogntogvekt = vogntogvektCount; break; case "taklast": int taklastCount; if (int.TryParse(i.Value, out taklastCount)) returnCar.Taklast = taklastCount; break; case "understellsnr": returnCar.Understellsnummer = i.Value; break; case "registreringsaar": int registreringsaarCount; if (int.TryParse(i.Value, out registreringsaarCount)) returnCar.Registreringsaar = registreringsaarCount; break; case "forstegangsreg": var forstegangsregString = i.Value.Split('.'); if (forstegangsregString.Length == 3) returnCar.ForsteGangsRegistrering = new DateTime(int.Parse(forstegangsregString[2]), int.Parse(forstegangsregString[1]), int.Parse(forstegangsregString[0])); break; case "registrertEierDato": var registrertEierDatoString = i.Value.Split('.'); if (registrertEierDatoString.Length == 3) returnCar.ForsteGangsRegistrering = new DateTime(int.Parse(registrertEierDatoString[2]), int.Parse(registrertEierDatoString[1]), int.Parse(registrertEierDatoString[0])); break; case "registrertDistrikt": returnCar.RegistrertDistrikt = i.Value; break; case "avregistrertDato": var avregistrertDatoString = i.Value.Split('.'); if (avregistrertDatoString.Length == 3) returnCar.ForsteGangsRegistrering = new DateTime(int.Parse(avregistrertDatoString[2]), int.Parse(avregistrertDatoString[1]), int.Parse(avregistrertDatoString[0])); break; case "egenvekt": int egenvektCount; if (int.TryParse(i.Value, out egenvektCount)) returnCar.Egenvekt = egenvektCount; break; case "totalvekt": int totalvektCount; if (int.TryParse(i.Value, out totalvektCount)) returnCar.Totalvekt = totalvektCount; break; case "lengde": int lengdeCount; if (int.TryParse(i.Value, out lengdeCount)) returnCar.Lengde = lengdeCount; break; case "bredde": int breddeCount; if (int.TryParse(i.Value, out breddeCount)) returnCar.Bredde = breddeCount; break; case "nyttelast": int nyttelastCount; if (int.TryParse(i.Value, out nyttelastCount)) returnCar.Nyttelast = nyttelastCount; break; case "akseltrykkForan": int akseltrykkForanCount; if (int.TryParse(i.Value, out akseltrykkForanCount)) returnCar.AkseltrykkForan = akseltrykkForanCount; break; case "akseltrykkBak": int akseltrykkBakCount; if (int.TryParse(i.Value, out akseltrykkBakCount)) returnCar.AkseltrykkBak = akseltrykkBakCount; break; case "dekkdimensjonForan": returnCar.DekkdimensjonForan = i.Value; break; case "dekkdimensjonBak": returnCar.DekkdimensjonBak = i.Value; break; case "hastighetsindeksForan": returnCar.HastighetsindeksForan = i.Value; break; case "hastighetsindeksBak": returnCar.HastighetsindeksBak = i.Value; break; case "lastindeksForan": int lastindeksForanCount; if (int.TryParse(i.Value, out lastindeksForanCount)) returnCar.LastindeksForan = lastindeksForanCount; break; case "lastindeksBak": int lastindeksBakCount; if (int.TryParse(i.Value, out lastindeksBakCount)) returnCar.LastindeksBak = lastindeksBakCount; break; case "innpressForan": returnCar.InnpressForan = i.Value; break; case "innpressBak": returnCar.InnpressBak = i.Value; break; case "antallAksler": int antallAkslerCount; if (int.TryParse(i.Value, out antallAkslerCount)) returnCar.AntallAksler = antallAkslerCount; break; case "eukontrollfrist": var eukontrollfristString = i.Value.Split('.'); if (eukontrollfristString.Length == 3) returnCar.EuKontrollfrist = new DateTime(int.Parse(eukontrollfristString[2]), int.Parse(eukontrollfristString[1]), int.Parse(eukontrollfristString[0])); break; case "eukontrollSist": var eukontrollsistString = i.Value.Split('.'); if (eukontrollsistString.Length == 3) returnCar.EuKontrollSist = new DateTime(int.Parse(eukontrollsistString[2]), int.Parse(eukontrollsistString[1]), int.Parse(eukontrollsistString[0])); break; default: break; } } return returnCar; }