[ bozicg @ 27.12.2013. 11:22 ] @
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.
[ manda @ 28.04.2014. 10:05 ] @
Bilo bi dobro da daš primer XMLa ...

Da li si probao sa

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



?
[ tuolarips @ 01.05.2014. 10:11 ] @
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).

[Ovu poruku je menjao tuolarips dana 01.05.2014. u 11:25 GMT+1]