Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 2.872 pregleda

Najnovija ↓

C# pomoc oko XMLa 27.12.2013. u 12:22 · pre 156 meseci #1
Situacija je sledeca. XML koji parsiram ima vise istih cvorova. Nekada ima 2 cvora, nekada 3 itd.
Nacin na koji preuzimam podatke je sledeci:
F
Code:
var items = (from r in xmlDoc.Descendants("record")
                        select new
                        {
                            Title = r.Element("metadata").Element("title").Value,
                            Creator = r.Element("metadata").Element("creator").Value,
                            Subject = r.Element("metadata").Element("subject").Value,
                            Contributor = r.Element("metadata").Element("contributor").Value,
                            Description = r.Element("metadata").Element("description").Value,
                            Abstract_theses = r.Element("metadata").Element("description").ElementsAfterSelf("description").First().Value,
                            Univerzitet = r.Element("metadata").Element("publisher").Value,
                    //        Fakultet = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").First().Value,
//                        Fakultet1= r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(1).Value,
                         Fakultet2= r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(2).Value, //Za ovaj izbacuje gresku ako ne postoji
                            fakulteti = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").Select(f => f.Value).ToArray(), //Ovo sam pokusao po savetu sa bencha, ali ne pomaze
                            Type = r.Element("metadata").Element("type").Value,
                            Format = r.Element("metadata").Element("format").Value,
                            Identefier = r.Element("metadata").Element("identifier").Value,
                            Language = r.Element("metadata").Element("language").Value,
                            Rights = r.Element("metadata").Element("rights").Value,

                        });



E problem je kada ne postoji treci cvor, izbacuje: Additional information: Specified argument was out of the range of valid values.
Znam sta znaci, pokusao sam na vise nacina i saveta sa stackowerflowa da ignorisem nepostojece cvorove ili da im upisem praznu vrednost, ali nista ne uspeva.
Re: C# pomoc oko XMLa 28.04.2014. u 11:05 · pre 152 meseca #2
Bilo bi dobro da daš primer XMLa ...

Da li si probao sa

Code:
Fakulteti = r.Element("metadata").Elements("publisher").ToArray()



?
Potpis
manda
Re: C# pomoc oko XMLa 01.05.2014. u 11:11 · pre 152 meseca
izmenjeno 1 put, poslednji put tuolarips 01.05.2014. u 11:25
  1. tuolarips01.05.2014. u 11:25zapis iz teksta poruke
#3
Taj kod koji si napisao je dosta neefikasan. Ovo r.Element("metadata") potencijalno može biti veoma zahtevna operacija (u zavisnosti od veličine XML-a), a ti je bespotrebno obavljaš za svaki property iznova. No, to je sad nebitno za tvoje pitanje, ali eto, čisto da ti ukažem na to. :)

Dalje, da li zaista postoji potreba za tim da ti ručno parsiraš XML? Mnogo elegantnije rešenje je upotreba .NET-ovog XMLSerializer-a. Naime, svoj objektni model treba da dekorišeš odgovarajućim atributima, a potom jednim pozivom metoda Deserialize dobijaš popunjenu instancu modela. Ako pak moraš ručno da parsiraš XML (jedan od razloga za to može biti da ti je to neki zadatak za fakultet), onda je najbolje da daš XML nad kojim tvoj kod puca (kao što reče manda).
Potpis
"Time is a drug. Too much of it kills you." Terry Pratchett
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme