c# - Add child elements to XML -


can put me in right direction?

what want output webmethod:

i values database;

1694.152344;1694.092285;1693.972168;1693.852051 2013-07-10 20:00:00;2013-07-10 19:00:00;2013-07-10 18:00:00;2013-07-10 17:00:00 

my xml:

<?xml version="1.0" encoding="utf-8"?> <fieldsroot xmlns="http://appserver.weevio.se/schema/sdkr1/fields.xsd"> <fields ok="true" nodeid="test_1.hw">     <numeric value="1694.152344" datum="2013-07-10 20:00:00" status="16" />     <numeric value="1694.092285" datum="2013-07-10 19:00:00" status="16" />     <numeric value="1693.972168" datum="2013-07-10 18:00:00" status="16" />     <numeric value="1693.852051" datum="2013-07-10 17:00:00" status="16" /> </fields> </fieldsroot> 

my code likes:

[webmethod] public xelement sum2() {      xnamespace defaultnamespace = xnamespace.get("http://appserver.weevio.se/schema/sdkr1/fields.xsd");     xelement test = new xelement(new xelement(defaultnamespace + "fieldsroot"));      string value = "1694.152344;1694.092285;1693.972168;1693.852051";     string datum = "2013-07-10 20:00:00;2013-07-10 19:00:00;2013-07-10 18:00:00;2013-07-10 17:00:00";      string[] valuea = value.split(';');     string[] datuma = datum.split(';');      int d = 0;     foreach (var customer in valuea)     {         xelement xelement = new xelement(defaultnamespace + "numeric",                 new xattribute("value", valuea[d]),                 new xattribute("datum", datuma[d]),                 new xattribute("status", 16)         );         test.add(new xelement(defaultnamespace + "fields", new xattribute("ok", "true"), new xattribute("nodeid", "test.hw"), xelement));         d = d + 1;     }     return test; } 

what is:

<?xml version="1.0" encoding="utf-8"?> <fieldsroot xmlns="http://appserver.weevio.se/schema/sdkr1/fields.xsd">   <fields ok="true" nodeid="test.hw">     <numeric value="1694.152344" datum="2013-07-10 20:00:00" status="16" />   </fields>   <fields ok="true" nodeid="test.hw">     <numeric value="1694.092285" datum="2013-07-10 19:00:00" status="16" />   </fields>   <fields ok="true" nodeid="test.hw">     <numeric value="1693.972168" datum="2013-07-10 18:00:00" status="16" />   </fields>   <fields ok="true" nodeid="test.hw">     <numeric value="1693.852051" datum="2013-07-10 17:00:00" status="16" />   </fields> </fieldsroot> 

you're adding fields element every time. isn't xml issue, logic issue. problem you're adding hte "fields" element inside loop. build of elements , add them single "fields" element. or, build fields element first , add sub-elements it. here's sample console app showing difference.

using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks; using system.xml.linq;  namespace consoleapplication2 {     class program     {         static void main(string[] args)         {             console.writeline(sum2().tostring());             console.writeline();             console.writeline(sum2working().tostring());             console.read();         }          public static xelement sum2()         {              xnamespace defaultnamespace = xnamespace.get("http://appserver.weevio.se/schema/sdkr1/fields.xsd");             xelement test = new xelement(new xelement(defaultnamespace + "fieldsroot"));              string value = "1694.152344;1694.092285;1693.972168;1693.852051";             string datum = "2013-07-10 20:00:00;2013-07-10 19:00:00;2013-07-10 18:00:00;2013-07-10 17:00:00";              string[] valuea = value.split(';');             string[] datuma = datum.split(';');              int d = 0;             foreach (var customer in valuea)             {                 xelement xelement = new xelement(defaultnamespace + "numeric",                         new xattribute("value", valuea[d]),                         new xattribute("datum", datuma[d]),                         new xattribute("status", 16)                 );                 test.add(new xelement(defaultnamespace + "fields", new xattribute("ok", "true"), new xattribute("nodeid", "test.hw"), xelement));                 d = d + 1;             }             return test;         }          public static xelement sum2working()         {              xnamespace defaultnamespace = xnamespace.get("http://appserver.weevio.se/schema/sdkr1/fields.xsd");             xelement test = new xelement(new xelement(defaultnamespace + "fieldsroot"));              string value = "1694.152344;1694.092285;1693.972168;1693.852051";             string datum = "2013-07-10 20:00:00;2013-07-10 19:00:00;2013-07-10 18:00:00;2013-07-10 17:00:00";              string[] valuea = value.split(';');             string[] datuma = datum.split(';');              int d = 0;              var fields = new list<xelement>();              foreach (var customer in valuea)             {                 xelement xelement = new xelement(defaultnamespace + "numeric",                         new xattribute("value", valuea[d]),                         new xattribute("datum", datuma[d]),                         new xattribute("status", 16)                 );                 fields.add(xelement);                 d = d + 1;             }              test.add(new xelement(defaultnamespace + "fields", new xattribute("ok", "true"), new xattribute("nodeid", "test.hw"), fields));              return test;         }     } } 

as can see, sum2working() adds elements list , adds list larger element.


Comments