Avatar billede Slettet bruger
17. september 2008 - 20:30 Der er 5 kommentarer

Hvad har jeg overset i denne LINQ to XML

Jeg er i gang med at lave noget opdatering af en webshop pris og der har jeg en XML fil som jeg skal have læst ind i et C# program. Jeg bruger LINQ to XML for læse den ind, men jeg får en fejl og jeg kan fa** ikke finde den!
Det skal siges at den første "from g..." virker godt nok uden den næste med Product...

Min LINQ kode er:

        var server = (from g in priceList.Descendants("group")
                          select new Groups
                                    {
                                        Name = g.Attribute("name").Value,
                                        allProducts = new List<Product>((from p in g.Elements("product")
                                                                              select new Product
                                                                                        {
                                                                                            Id = p.Attribute("id").Value,
                                                                                            Name = p.Element("name").Value,
                                                                                            Stock = p.Element("stock").Value,
                                                                                            Weight = p.Element("weight").Value,
                                                                                            Model = p.Element("model").Value,
                                                                                            ShortDescription = p.Element("shortDescription").Value,
                                                                                            ManufacturerName = p.Element("manufacturerName").Value,
                                                                                            ManufacturerUrl = p.Element("manufacturerURL").Value,
                                                                                            Price = p.Element("price").Value

                                                                                        }))
                                    });


og et udsnit af XML:

<group name="Anden Software">
  <product id="50332">
    <name>Adobe Acrobat V8 DK Retail</name>
    <stock>Nej Lager</stock>
    <weight>1.0</weight>
    <model>22002167</model>
    <shortDescription>Adobe Acrobat Standard - ( v. 8.0 ) -      komplet pakke - 1 bruger - CD - Win - Dansk</shortDescription>
    <manufacturerName>Adobe</manufacturerName>
    <manufacturerURL>http://www.adobe.dk/</manufacturerURL>
    <price>2499</price>
  </product>
</group>
Avatar billede Slettet bruger
17. september 2008 - 20:57 #1
Jeg er kommet frem til at fejlen ligger meget dybt nede i filen, hvor <manufacturerURL></manufacturerURL> optræder min. 1 gang.
Hvordan kan jeg komme udenom denne ??
Avatar billede Slettet bruger
17. september 2008 - 22:49 #2
Lidt mere info :)
Det er ikke <manufacturerURL></manufacturerURL> der er problemmet, problemmet er hvis <manufacturerURL></manufacturerURL> slet IKKE eksistere, så fejler ManufacturerUrl = p.Element("manufacturerURL").Value naturligvis da det element ikke eksistere.
En løsning fra en af jer ville virkelig hjælpe mig :)
Avatar billede jydebjerg42 Nybegynder
18. september 2008 - 17:26 #3
For at undgå en fejl hvis der ikke er et <manufacturerURL> element kan du gøre som følger:

ManufacturerUrl = p.Element("manufacturerURL") ? p.Element("manufacturerURL").Value : null

På den måde tilgår du kun .Value hvis elementet kan returneres og assigner ellers null til ManufacturerUrl.
Avatar billede Slettet bruger
18. september 2008 - 18:57 #4
God ide, men desværre så får jeg at vide:

Error    1    Cannot implicitly convert type 'System.Xml.Linq.XElement' to 'bool'. An explicit conversion exists (are you missing a cast?).
Avatar billede jydebjerg42 Nybegynder
19. september 2008 - 22:09 #5
Sådan kan det jo nogen gange gå lidt for hurtigt :-) Du skal naturligvis have et expression der evaluerer til en boolean og derfor sammenligne med null (da det jo netop er null du vil undgå).

ManufacturerUrl = p.Element("manufacturerURL")!=null ? p.Element("manufacturerURL").Value : null
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester