Šta je novo?

C# problem

^GOJKO^

Slavan
Učlanjen(a)
09.06.2007
Poruke
248
Poena
319
Situacija je sledeca. XML koji parsiram ima vise istih cvorova. Nekada ima 2 cvora, nekada 3 itd.
Nacin na koji preuzimam podatke je sledeci:
Kod:
Fakultet = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").First().Value,
Fakultet2 = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(1).Value,
Fakultet3 = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(2).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.
Zadnje sto sam probao je ovo
Kod:
Fakultet1 = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").Any() ? r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(1).Value : null,
 
Poslednja izmena:
Probaj ovako
Kod:
var fakulteti = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").Select(f => f.Value).ToArray();
 
Pravio mi je problem zbog var i ; na kraju pa sam prilagodio nekako.

Nece ni ovako, evo ceo taj deo, mozda moze da pomogne.

Kod:
 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").Any() ? r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").ElementAt(1).Value : null,
                            fakulteti = r.Element("metadata").Element("publisher").ElementsAfterSelf("publisher").Select(f => f.Value).ToArray(),
                            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,

                        });
 
Poslednja izmena:
Pa ok, var i ne moze da radi jer ti ovde definises propertije anonimnog tipa. Ovo mi deluje ok. Sta znaci "nece ni ovako" ? Jel dobijas isti exception?
 
Kada u foreach petlji pokusam da pristupim sa fakulteti[1] baca mi opet out of range
 
Pa mislim da bi ti bilo bolje da ga ostavis kao niz, posto to ocigledno jeste niz fakulteta, koji je varijabilan. Ali ako bas insistiras da radis kao sto si krenuo, onda stavi proveru pre pristupanja.

if(fakulteti.Length >1)
fakulteti[1].....
 
Nazad
Vrh Dno