c# - how to read this XML using LINQ to XML -


i new linq xml, , working following xml:

<invoices>   <invoice>     <order_id>85</order_id>     <time>02:52 pm</time>     <date>24-05-2013</date>     <order>       <item>         <main>           <id>343</id>           <qty>1</qty>         </main>         <add />       </item>       <item>         <main>           <id>3</id>           <qty>1</qty>         </main>         <add>           <extra id="1">             <qty>1</qty>             <desc>regular</desc>           </extra>         </add>       </item>     </order>   </invoice>   <invoice>     <order_id>88</order_id>     <time>03:10 pm</time>     <date>24-05-2013</date>     <order>       <item>         <main>           <id>345</id>           <qty>1</qty>         </main>         <add />       </item>       <item>         <main>           <id>2</id>           <qty>2</qty>         </main>         <add>           <extra id="1">             <qty>1</qty>             <desc>regular</desc>           </extra>         </add>       </item>     </order>   </invoice> </invoices> 

so far have written following code:

void querydata(xdocument doc) {         var data = item in doc.descendants("invoice")                    select new                    {                        orderid = item.element("order_id").value,                        orderdate = item.element("date").value,                        ordertime = item.element("time").value                    };         foreach(var p in data)             console.writeline(p.tostring());          //...  } 

i having trouble reading nested tags in "order" tag. element/tag "add" has "extra" no. of tags/elements , not.

i don't have access code xml generated have read pattern.

so far have tried working grouping, not able work 2nd , 3rd level elements.

after reading save these values database.

thanks,

let me know if off something, didn't chance test this, , had assume of elements going duplicated

var data = item in doc.descendants ( "invoice" )     select new {         orderid = item.element ( "order_id" ).value ,         orderdate = item.element ( "date" ).value ,         ordertime = item.element ( "time" ).value ,         items =              order in item.element ( "order" ).descendants ( "item" )             let main = order.element ( "main" )             let adds = order.elements ( "add" )             select new {                 main = new {                     id = main.element ( "id" ).value ,                     qty = main.element ( "qty" ).value                 } ,                 add =                  (from add in adds                     let extras = add.elements ( "extra" )                     select new {                                 = ( in extras                                         select new {                                                 extraid = extra.attribute("id").value,                                                 qty = extra.element ( "qty" ).value ,                                                 desc = extra.element ( "desc" ).value                                             }).firstordefault ( )                             }).firstordefault()             } }; 

Comments