Treeview to XML with proper indentation c# -
i'm having trouble exporting treeview xml file proper indentation, looked through forum not find anything.
here link on how write xml treeview recursion, parsing xml file attributes treeview c#
here code attempting export treeview xml
public void exporttoxml(treeview tv, string filename) { sr = new streamwriter(filename, false, system.text.encoding.utf8); //write header sr.writeline("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); //write our root node sr.writeline("<" + treeview1.nodes[0].text + ">"); foreach (treenode node in tv.nodes) { savenode(node.nodes); } //close root node sr.writeline("</" + treeview1.nodes[0].text + ">"); sr.close(); } private void savenode(treenodecollection tnc) { foreach (treenode node in tnc) { //if have child nodes, we'll write //a parent node, iterrate through //the children if (node.nodes.count > 0) { sr.writeline("\t\t<" + node.text + ">"); savenode(node.nodes); sr.writeline("\t\t</" + node.text + ">"); } else //no child nodes, write text sr.writeline("\t\t\t"+node.text); } }
xml output
<?xml version="1.0" encoding="utf-8" ?> <dataconfiguration xmln="abcefg12345" xmlns:xsi="12345abcefg" xsi:schemalocation="12345abcefg12345abcefg"> <hosts> <sites> <site name="ss"> <host id="aa"> address host="www.www.com" </host id="aa"> <host id="ee"> address host="www.www.com" </host id="ee"> <host id="dd"> address host="www.www.com" </host id="dd"> <host id="pp"> address scheme="ppp" host="www.www.com" path="www.www.com" address scheme="ppp" host="www.www.com" path="www.www.com/" </host id="pp"> <host id="ss"> address scheme="ppp" host="www.www.com" path="www.www.com" address scheme="ppp" host="www.www.com" path="www.www.com" </host id="ss"> <host id="561"> address host="www.www.com" </host id="561"> </site name="ss"> <site name="hihi"> <host id="cc"> address host="www.www.com" </host id="cc"> <host id="sdd"> address host="www.www.com" </host id="sdd"> <host id="8uj"> address scheme="ppp" host="www.www.com" path="www.www.com" address scheme="ppp" host="www.www.com" path="www.www.com" </host id="8uj"> <host id="222"> address scheme="ppp" host="www.www.com" path="www.www.com" address scheme="ppp" host="www.www.com" path="www.www.com" </host id="222"> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> </site name="hihi"> </sites> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> <host id="hhh"> address scheme="ppp" host="www.www.com" path="www.www.com" </host id="hhh"> </hosts> <datapools> <datapool id="sss" default="sure"> <datagroup id="sss" parent="aaa" usercanselecthost="sure"> <hostid parent="hhhh"> i'm breaking here </hostid parent="hhhh"> <datasources> empty </datasources> </datagroup id="sss" parent="aaa" usercanselecthost="sure"> <datagroup id="ccc" usercanselecthost="whynot"> <hostid> god i'm breaking here again, hope can fix me </hostid> <datasources> empty </datasources> </datagroup id="ccc" usercanselecthost="whynot"> <datagroup id="sss" usercanselecthost="yessure"> <hostid> cry face </hostid> webfg displaygroup="sss" provider="sss" id="ccc" principal="ccc" nioarc="ccc" nap="ccc" group="ccc" nhood port="1234" <servernames> <!-- insert comment --> <!-- insert comment --> <!-- insert comment --> <servername> myname </servername> <servername> yourname </servername> </servernames> <!-- insert comment --> <implementations> <implementation> <name> yourname </name> <type> typeme </type> <assembly> visionme </assembly> <path> ohno </path> </implementation> </implementations> --> cfgman port="ccc" webservice provider="ccc" webservice provider="ccc" webservice provider="ccc" <parameters> useeventpush value="ccc" </parameters> webservice provider="ccc" pollingfrequency value="1000" </datagroup id="sss" usercanselecthost="yessure"> </datapool id="sss" default="sure"> <datagroup id="ccc " usercanselecthost="ccc"> <datagroup id="ccc " usercanselecthost="ccc"> <hostid> idk </hostid> <datasources> empty </datasources> </datagroup id="ccc " usercanselecthost="ccc"> <datagroup id="ccc " usercanselecthost="ccc"> <hostid> idk </hostid> <datasources> empty </datasources> </datagroup id="ccc " usercanselecthost="ccc"> <datagroup id="default" usercanselecthost="true"> <hostid> idk </hostid> </datagroup id="default" usercanselecthost="true"> </datagroup id="ccc " usercanselecthost="ccc"> </datapools> </dataconfiguration xmln="abcefg12345" xmlns:xsi="12345abcefg" xsi:schemalocation="12345abcefg12345abcefg">
desired xml output (original xml document)
<?xml version="1.0" encoding="utf-8"?> <dataconfiguration xmln="abcefg12345" xmlns:xsi="12345abcefg" xsi:schemalocation="12345abcefg12345abcefg"> <hosts> <sites> <site name="ss"> <host id="aa"> <address host="www.www.com"> </address> </host> <host id="ee"> <address host="www.www.com"> </address> </host> <host id="dd"> <address host="www.www.com"> </address> </host> <host id="pp"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> <address scheme="ppp" host="www.www.com" path="www.www.com/"/> </host> <host id="ss"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="561"> <address host="www.www.com"> </address> </host> </site> <site name="hihi"> <host id="cc"> <address host="www.www.com"> </address> </host> <host id="sdd"> <address host="www.www.com"> </address> </host> <host id="8uj"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="222"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> </site> </sites> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> <host id="hhh"> <address scheme="ppp" host="www.www.com" path="www.www.com"/> </host> </hosts> <datapools> <datapool id="sss" default="sure"> <datagroup id="sss" parent="aaa" usercanselecthost="sure" > <hostid parent="hhhh">i'm breaking here</hostid> <datasources> <empty/> </datasources> </datagroup> <datagroup id="ccc" usercanselecthost="whynot" > <hostid>god i'm breaking here again, hope can fix me</hostid> <datasources> <empty/> </datasources> </datagroup> <datagroup id="sss" usercanselecthost="yessure" > <hostid>cry face</hostid> <webfg displaygroup="sss" provider="sss" id="ccc" principal="ccc" nioarc="ccc" nap="ccc" group="ccc"> </webfg> <nhood port="1234"/> <servernames> <!-- insert comment --> <!-- insert comment --> <!-- insert comment --> <servername>myname</servername> <servername>yourname</servername> </servernames> <!-- insert comment --> <implementations> <implementation> <name>yourname</name> <type>typeme</type> <assembly>visionme</assembly> <path>ohno</path> </implementation> </implementations>--> <cfgman port="ccc" /> <webservice provider="ccc" /> <webservice provider="ccc" /> <webservice provider="ccc" /> <parameters> <useeventpush value="ccc"/> </parameters> <webservice provider="ccc" /> <pollingfrequency value="1000"/> </datagroup> </datapool> <datagroup id="ccc " usercanselecthost="ccc" > <datagroup id="ccc " usercanselecthost="ccc" > <hostid>idk</hostid> <datasources> <empty/> </datasources> </datagroup> <datagroup id="ccc " usercanselecthost="ccc" > <hostid>idk</hostid> <datasources> <empty/> </datasources> </datagroup> <datagroup id="default" usercanselecthost="true" > <hostid>idk</hostid> </datagroup> </datagroup> </datapools> </dataconfiguration>
as can see, indentation kinda off output, purpose let user edit information on tree nodes , save original file.
public void exporttoxml(treeview tv, string filename) { sr = new streamwriter(filename, false, system.text.encoding.utf8); //write header sr.writeline("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); //write our root node sr.writeline("<" + treeview1.nodes[0].text + ">"); foreach (treenode node in tv.nodes) { int depth = 1; savenode(node.nodes, depth); } //close root node sr.writeline("</" + treeview1.nodes[0].text + ">"); sr.close(); } private void savenode(treenodecollection tnc, int depth) { foreach (treenode node in tnc) { for(int =0; i<depth;i++) { sr.write("\t"); } if (node.nodes.count > 0) { sr.writeline("<" + node.text + ">"); savenode(node.nodes, depth + 1); for(int =0; i<depth;i++) { sr.write("\t"); } sr.writeline("</" + node.text.split()[0] + ">"); } else //no child nodes, write text sr.writeline("<" + node.text + "/>"); } }
if going use code need variable count how deep in recursion , use number of tabs
Comments
Post a Comment