go to post Rizmaan Marikar · Sep 10, 2019 thank you for the solution provided, i will definitely try this, the challenge is that in the XML file is generated, will always not follow the same amount of columns, so i need to generate the xdata stylesheet on runtime.
go to post Rizmaan Marikar · Sep 10, 2019 Thank you, i tried your solution, one issue that i noticed is;Suppose if <Col1> </Col1> is empty, with the above solution rdr.NodeType="chars" will not evaluate, and the CSV file will be wrong. tweaked it as follows; #define DEL "," #define DC """" if ##class(%XML.TextReader).ParseFile(myfile, .rdr) { if rdr.Read(), rdr.NodeType="element", rdr.Name=ROOT { if $t { set (nodeType,nodeName,line,header,childElementValue) = "" set cnt=1 while rdr.Read() { set nodeType = rdr.NodeType, nodeName = rdr.Name, length = $length(rdr.Path,"/") if nodeType="element",nodeName=NAME { set line="" } elseif cnt=1,nodeType="element",(length>3){ set header = header_$$$DC_nodeName_$$$DC_$$$DEL } elseif ((nodeType="chars") & (length>3)) { set childElementValue=rdr.Value } elseif nodeType="endelement",length=4 { set line=line_$$$DC_childElementValue_$$$DC_$$$DEL,childElementValue="" } elseif nodeType="endelement",nodeName=NAME { if cnt=1 { do stream.WriteLine(header) set cnt=0 } do stream.WriteLine(line) } elseif nodeType="endelement",nodeName=ROOT { quit } } } else { w "file open problem",! } } else { w "XML root-element problem",! } } else { w "XML structure problem",! } Although when it comes to a large file ParseFile method takes a significant amount of time to process the file, and i want to improve the code to run faster. for example calling stream.WriteLine for each line can slow down the process, i want to try and batch the data and send to the stream to make the process much faster, and there is a concern for the <MAXLENGH> error. Any Ideas?