SSZFM00901.xjs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name :
  4. * Job Name : XML => DataSet 자동 변환
  5. * File Name : SSZFM00901.xjs
  6. * Creator :
  7. * Make Date :
  8. *
  9. * Description : XML을 DATASET으로 자동 변환한다.
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. *
  14. *---------------------------------------------------------------------------------------
  15. ****************************************************************************************/
  16. var gDsPrifixNm = "ds_data_"; //data 생성 명칭 prifix
  17. var gDsList = []; //생성한 DATASET 정보
  18. var gSelectDs = ""; //선택한 DS name
  19. var gSetParamObj = new Object();
  20. //=======================================================================================
  21. // Function
  22. //-------------------------------------------------------------------------------------------------------------------------------------------------------------
  23. /***********************************************************************************************
  24. * 함수명 : lf_convertXmlToDs
  25. * 설 명 : XML을 DS으로 변환한다.
  26. * argument : pXmlStr : XML(string type)
  27. pParamObj : Object
  28. pParamObj.pathYN - 'Y' / 'N' : dsvaluepath 컬럼 사용여부
  29. pParamObj.nullColumnYN - 'Y' / 'N' : xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  30. pParamObj.colNameCase - 'upper' / 'lower' / '' 또는 null : 컬럼명칭 upper(대문자), lower(소문자) 그 이외에 문자 그대로 설정
  31. * return Type : 'success' : 성공시
  32. 'error' : 실패시
  33. * 작성자 :
  34. ************************************************************************************************/
  35. function lf_convertXmlToDs(pXmlStr, pParamObj)
  36. {
  37. if(utlf_isNull(pXmlStr)){
  38. sysf_messageBox("XML 값이 없습니다.", "E");
  39. return "error";
  40. }
  41. var domParser = new DomParser;
  42. var domParser = domParser.parseFromString(pXmlStr);
  43. if (domParser == null){
  44. sysf_messageBox("XML 형식이 잘못 되었습니다.", "E");
  45. return "error";
  46. }
  47. //파라미터 옵션세팅
  48. if(!utlf_isNull(pParamObj)){
  49. gSetParamObj.pathYN = utlf_isNull(pParamObj.pathYN) ? 'Y' : pParamObj.pathYN; //dsvaluepath 컬럼 사용여부 (default 'Y')
  50. gSetParamObj.nullColumnYN = utlf_isNull(pParamObj.nullColumnYN) ? 'Y' : pParamObj.nullColumnYN; //xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  51. gSetParamObj.colNameCase = utlf_isNull(pParamObj.colNameCase) ? '' : pParamObj.colNameCase //dataset 컬럼 명칭을 대문자/소문자 처리 여부
  52. }else{
  53. gSetParamObj.pathYN = 'Y';
  54. gSetParamObj.nullColumnYN = 'N';
  55. gSetParamObj.colNameCase = "";
  56. }
  57. var tagNm = domParser.documentElement.nodeName;
  58. //var nodes = domParser.getElementsByTagName(tagNm);
  59. var nodes = domParser.getElementsByPath("/" + tagNm);
  60. var sValue = lf_parseXml(nodes, nodes.nodes, pParamObj);
  61. //trace("tagNm :"+tagNm+' / '+nodes+' / '+sValue);
  62. if(!sValue){ //변환 실패시 만들어진 dataset 삭제 처리
  63. for(var i=gDsList.length-1; i >= 0; i--){
  64. var removeObj = this.removeChild(this.objects[gDsList[i]].name);
  65. delete removeObj;
  66. removeObj = null;
  67. }
  68. gDsList = [];
  69. sysf_messageBox("변환이 실패하였습니다.", "E");
  70. return "error";
  71. }
  72. //데이터가 없는 DS 삭제
  73. for(var i=gDsList.length-1; i >= 0; i--){
  74. if(this.objects[gDsList[i]].colcount == 0 || (this.objects[gDsList[i]].colcount == 1 && this.objects[gDsList[i]].colinfos[0].name == "dsvaluepath")){
  75. var tmpObj = this.removeChild(this.objects[gDsList[i]].name);
  76. delete tmpObj;
  77. tmpObj = null;
  78. }
  79. }
  80. gDsList = [];
  81. return "success";
  82. }
  83. /***********************************************************************************************
  84. * 함수명 : lf_parseXml
  85. * 설 명 : DOM객체를 DS으로 변환한다.
  86. * argument : pChilds : xml nodelist 객체
  87. pTagNm : xml node name
  88. * return Type : true : 변환 성공시
  89. false : 변환 실패시
  90. * 작성자 :
  91. ************************************************************************************************/
  92. function lf_parseXml(pChilds, pTagNm){
  93. var sReturnValue = true;
  94. try{
  95. var nAddRow = 0;
  96. var rtn = this.all[gDsPrifixNm+pTagNm];
  97. var pathColumn;
  98. var valuePath;
  99. var sNodeName;
  100. if(!rtn) {
  101. var objDs = new Dataset;
  102. //trace("lf_parseXml1 "+ pChilds+' / '+pTagNm+' / '+rtn+' / '+objDs);
  103. var sDsNameInsert = gDsPrifixNm+pTagNm;
  104. objDs.name = sDsNameInsert;
  105. this.addChild(sDsNameInsert, objDs);
  106. gDsList.push(gDsPrifixNm+pTagNm);
  107. }else{
  108. objDs = this.all[gDsPrifixNm+pTagNm];
  109. //trace("lf_parseXml2 "+ pChilds+' / '+pTagNm+' / '+rtn+' / '+objDs);
  110. if(gSelectDs != pTagNm) objDs.clearData(); //dsset 초기화
  111. nAddRow = objDs.addRow();
  112. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  113. pathColumn = objDs.getColumnInfo("dsvaluepath");
  114. if(utlf_isNull(pathColumn)){
  115. objDs.addColumn("dsvaluepath","string");
  116. }
  117. valuePath = pChilds[0].nodePath.split("/"+pChilds[0].nodeName);
  118. objDs.setColumn(nAddRow, "dsvaluepath", valuePath[0]);
  119. }
  120. }
  121. objDs.enableevent = false;
  122. for (var i=0;i<pChilds.length;i++){
  123. var grandChilds = pChilds[i].childNodes;
  124. if(gSetParamObj.colNameCase == "upper"){
  125. sNodeName = pChilds[i].nodeName.toUpperCase(); //대문자 처리
  126. }else if(gSetParamObj.colNameCase == "lower"){
  127. sNodeName = pChilds[i].nodeName.toLowerCase();//소문자 처리
  128. }else{
  129. sNodeName = pChilds[i].nodeName //xml 문자 그대로 처리
  130. }
  131. if((pChilds[i].childNodes.length > 1 && pChilds[i].nodeType == 1) || grandChilds.length >= 1 && grandChilds[0].nodeType == 1){
  132. lf_parseXml(grandChilds, sNodeName);
  133. }else{
  134. if(objDs.rowcount == 0){ //dataset에 row가 없는 경우
  135. nAddRow = objDs.addRow();
  136. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  137. pathColumn = objDs.getColumnInfo("dsvaluepath");
  138. if(utlf_isNull(pathColumn)){
  139. objDs.addColumn("dsvaluepath","string");
  140. }
  141. valuePath = pChilds[i].nodePath.split("/"+sNodeName);
  142. objDs.setColumn(nAddRow, "dsvaluepath", valuePath[0]);
  143. }
  144. }
  145. if(gSetParamObj.nullColumnYN == 'Y' || (gSetParamObj.nullColumnYN == 'N' && !utlf_isNull(pChilds[i].textContent))){
  146. var objColumn = objDs.getColumnInfo(sNodeName);
  147. if(utlf_isNull(objColumn)){
  148. objDs.addColumn(sNodeName,"string");
  149. }
  150. objDs.setColumn(nAddRow, sNodeName, pChilds[i].textContent);
  151. }
  152. gSelectDs = pTagNm;
  153. }
  154. }
  155. objDs.enableevent = true;
  156. sReturnValue = true;
  157. }catch(e){
  158. sReturnValue = false;
  159. gCheckClear = true;
  160. }
  161. return sReturnValue;
  162. }
  163. /***********************************************************************************************
  164. * 함수명 : lf_convertXmlToDs2
  165. * 설 명 : XML을 DS으로 변환한다.
  166. * argument : pXmlStr : XML(string type)
  167. pParamObj : Object
  168. pParamObj.pathYN - 'Y' / 'N' : dsvaluepath 컬럼 사용여부
  169. pParamObj.nullColumnYN - 'Y' / 'N' : xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  170. pParamObj.colNameCase - 'upper' / 'lower' / '' 또는 null : 컬럼명칭 upper(대문자), lower(소문자) 그 이외에 문자 그대로 설정
  171. * return Type : 'success' : 성공시
  172. 'error' : 실패시
  173. * 작성자 :
  174. ************************************************************************************************/
  175. function lf_convertXmlToDs2(pXmlStr, pParamObj)
  176. {
  177. if(utlf_isNull(pXmlStr)){
  178. sysf_messageBox("XML 값이 없습니다.", "E");
  179. return "error";
  180. }
  181. var domParser = new DomParser;
  182. var domParser = domParser.parseFromString(pXmlStr);
  183. if (domParser == null){
  184. sysf_messageBox("XML 형식이 잘못 되었습니다.", "E");
  185. return "error";
  186. }
  187. //파라미터 옵션세팅
  188. if(!utlf_isNull(pParamObj)){
  189. gSetParamObj.pathYN = utlf_isNull(pParamObj.pathYN) ? 'Y' : pParamObj.pathYN; //dsvaluepath 컬럼 사용여부 (default 'Y')
  190. gSetParamObj.nullColumnYN = utlf_isNull(pParamObj.nullColumnYN) ? 'Y' : pParamObj.nullColumnYN; //xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  191. gSetParamObj.colNameCase = utlf_isNull(pParamObj.colNameCase) ? '' : pParamObj.colNameCase //dataset 컬럼 명칭을 대문자/소문자 처리 여부
  192. }else{
  193. gSetParamObj.pathYN = 'Y';
  194. gSetParamObj.nullColumnYN = 'N';
  195. gSetParamObj.colNameCase = "";
  196. }
  197. var tagNm = domParser.documentElement.nodeName;
  198. //var nodes = domParser.getElementsByTagName(tagNm);
  199. var nodes = domParser.getElementsByPath("/" + tagNm);
  200. var sValue = lf_parseXml2(nodes, nodes.nodes, pParamObj);
  201. if(!sValue){ //변환 실패시 만들어진 dataset 삭제 처리
  202. for(var i=gDsList.length-1; i >= 0; i--){
  203. var removeObj = this.removeChild(this.objects[gDsList[i]].name);
  204. delete removeObj;
  205. removeObj = null;
  206. }
  207. gDsList = [];
  208. sysf_messageBox("변환이 실패하였습니다.", "E");
  209. return "error";
  210. }
  211. //데이터가 없는 DS 삭제
  212. for(var i=gDsList.length-1; i >= 0; i--){
  213. if(this.objects[gDsList[i]].colcount == 0 || (this.objects[gDsList[i]].colcount == 1 && this.objects[gDsList[i]].colinfos[0].name == "dsvaluepath")){
  214. var tmpObj = this.removeChild(this.objects[gDsList[i]].name);
  215. delete tmpObj;
  216. tmpObj = null;
  217. }
  218. }
  219. gDsList = [];
  220. return "success";
  221. }
  222. /***********************************************************************************************
  223. * 함수명 : lf_parseXml2
  224. * 설 명 : DOM객체를 DS으로 변환한다.
  225. * argument : pChilds : xml nodelist 객체
  226. pTagNm : xml node name
  227. * return Type : true : 변환 성공시
  228. false : 변환 실패시
  229. * 작성자 :
  230. ************************************************************************************************/
  231. function lf_parseXml2(pChilds, pTagNm){
  232. var sReturnValue = true;
  233. try{
  234. var nAddRow = 0;
  235. var rtn = this.all[gDsPrifixNm+pTagNm];
  236. var pathColumn;
  237. var valuePath;
  238. var sNodeName;
  239. if(!rtn) {
  240. var objDs = new Dataset;
  241. var sDsNameInsert = gDsPrifixNm+pTagNm;
  242. objDs.name = sDsNameInsert;
  243. this.addChild(sDsNameInsert, objDs);
  244. gDsList.push(gDsPrifixNm+pTagNm);
  245. }else{
  246. objDs = this.all[gDsPrifixNm+pTagNm];
  247. if(gSelectDs != pTagNm) objDs.clearData(); //dsset 초기화
  248. nAddRow = objDs.addRow();
  249. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  250. pathColumn = objDs.getColumnInfo("dsvaluepath");
  251. if(utlf_isNull(pathColumn)){
  252. objDs.addColumn("dsvaluepath","string");
  253. }
  254. valuePath = pChilds[0].nodePath.split("/"+pChilds[0].nodeName);
  255. objDs.setColumn(nAddRow, "dsvaluepath", valuePath[0]);
  256. }
  257. }
  258. objDs.enableevent = false;
  259. var flagChild = false;
  260. for (var i=0;i<pChilds.length;i++){
  261. var grandChilds = pChilds[i].childNodes;
  262. if(gSetParamObj.colNameCase == "upper"){
  263. sNodeName = pChilds[i].nodeName.toUpperCase(); //대문자 처리
  264. }else if(gSetParamObj.colNameCase == "lower"){
  265. sNodeName = pChilds[i].nodeName.toLowerCase();//소문자 처리
  266. }else{
  267. sNodeName = pChilds[i].nodeName //xml 문자 그대로 처리
  268. }
  269. if((pChilds[i].childNodes.length > 1 && pChilds[i].nodeType == 1) || grandChilds.length >= 1 && grandChilds[0].nodeType == 1){
  270. flagChild = true;
  271. lf_parseXml2(grandChilds, sNodeName);
  272. }else{
  273. //if(objDs.rowcount == 0){ //dataset에 row가 없는 경우
  274. if(objDs.rowcount == 0 || (objDs.rowcount == 1 && flagChild == true && objDs.getColumn(0, "dsvaluepath") != pChilds[i].nodePath.split("/"+sNodeName)[0]) ){ //dataset에 row가 있으면서 dsvaluepath가 다를경우
  275. flagChild = false;
  276. nAddRow = objDs.addRow();
  277. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  278. pathColumn = objDs.getColumnInfo("dsvaluepath");
  279. if(utlf_isNull(pathColumn)){
  280. objDs.addColumn("dsvaluepath","string");
  281. }
  282. valuePath = pChilds[i].nodePath.split("/"+sNodeName);
  283. objDs.setColumn(nAddRow, "dsvaluepath", valuePath[0]);
  284. }
  285. }
  286. if(gSetParamObj.nullColumnYN == 'Y' || (gSetParamObj.nullColumnYN == 'N' && !utlf_isNull(pChilds[i].textContent))){
  287. var objColumn = objDs.getColumnInfo(sNodeName);
  288. if(utlf_isNull(objColumn)){
  289. objDs.addColumn(sNodeName,"string");
  290. }
  291. objDs.setColumn(nAddRow, sNodeName, pChilds[i].textContent);
  292. }
  293. gSelectDs = pTagNm;
  294. }
  295. }
  296. objDs.enableevent = true;
  297. sReturnValue = true;
  298. }catch(e){
  299. sReturnValue = false;
  300. gCheckClear = true;
  301. }
  302. return sReturnValue;
  303. }
  304. function lf_convertXmlToDs3(pXmlStr, pParamObj, pTargetNode ) {
  305. if(utlf_isNull(pXmlStr)){
  306. sysf_messageBox("XML 값이 없습니다.", "E");
  307. return "error";
  308. }
  309. var domParser = new DomParser;
  310. var domParser = domParser.parseFromString(pXmlStr);
  311. if (domParser == null){
  312. sysf_messageBox("XML 형식이 잘못 되었습니다.", "E");
  313. return "error";
  314. }
  315. //파라미터 옵션세팅
  316. if(!utlf_isNull(pParamObj)){
  317. gSetParamObj.pathYN = utlf_isNull(pParamObj.pathYN) ? 'Y' : pParamObj.pathYN; //dsvaluepath 컬럼 사용여부 (default 'Y')
  318. gSetParamObj.nullColumnYN = utlf_isNull(pParamObj.nullColumnYN) ? 'Y' : pParamObj.nullColumnYN; //xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  319. gSetParamObj.colNameCase = utlf_isNull(pParamObj.colNameCase) ? '' : pParamObj.colNameCase //dataset 컬럼 명칭을 대문자/소문자 처리 여부
  320. }else{
  321. gSetParamObj.pathYN = 'Y';
  322. gSetParamObj.nullColumnYN = 'N';
  323. gSetParamObj.colNameCase = "";
  324. }
  325. var tagNm = domParser.documentElement.nodeName;
  326. var nodes ;
  327. if(utlf_isNull(pTargetNode)) {
  328. pTargetNode = "/" + tagNm;
  329. nodes = domParser.getElementsByPath(tagNm);
  330. }
  331. else {
  332. nodes = domParser.getElementsByPath(pTargetNode);
  333. }
  334. var nodeName = nodes[0].nodeName;
  335. //nodeName = nodeName.substr(1);
  336. var sValue = lf_parseXml3(nodes, "");
  337. if(!sValue){ //변환 실패시 만들어진 dataset 삭제 처리
  338. for(var i=gDsList.length-1; i >= 0; i--){
  339. var removeObj = this.removeChild(this.objects[gDsList[i]].name);
  340. delete removeObj;
  341. removeObj = null;
  342. }
  343. gDsList = [];
  344. sysf_messageBox("변환이 실패하였습니다.", "E");
  345. return "error";
  346. }
  347. //데이터가 없는 DS 삭제
  348. for(var i=gDsList.length-1; i >= 0; i--){
  349. if(this.objects[gDsList[i]].colcount == 0 || (this.objects[gDsList[i]].colcount == 1 && this.objects[gDsList[i]].colinfos[0].name == "dsvaluepath")){
  350. var tmpObj = this.removeChild(this.objects[gDsList[i]].name);
  351. delete tmpObj;
  352. tmpObj = null;
  353. }
  354. }
  355. gDsList = [];
  356. return "success";
  357. }
  358. /***********************************************************************************************
  359. * 함수명 : lf_parseXml
  360. * 설 명 : DOM객체를 DS으로 변환한다.
  361. * argument : pChilds : xml nodelist 객체
  362. pTagNm : xml node name
  363. * return Type : true : 변환 성공시
  364. false : 변환 실패시
  365. * 작성자 :
  366. ************************************************************************************************/
  367. function lf_parseXml3(pChilds, pTagNm){
  368. var sReturnValue = true;
  369. try{
  370. var nAddRow = 0;
  371. var rtn = this.all[gDsPrifixNm+pTagNm];
  372. var pathColumn;
  373. var valuePath;
  374. var sNodeName;
  375. if(!rtn) {
  376. var objDs = new Dataset;
  377. var sDsNameInsert = gDsPrifixNm+pTagNm;
  378. objDs.name = sDsNameInsert;
  379. this.addChild(sDsNameInsert, objDs);
  380. gDsList.push(gDsPrifixNm+pTagNm);
  381. }else{
  382. objDs = this.all[gDsPrifixNm+pTagNm];
  383. if(gSelectDs != pTagNm) objDs.clearData(); //dsset 초기화
  384. nAddRow = objDs.addRow();
  385. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  386. pathColumn = objDs.getColumnInfo("dsvaluepath");
  387. if(utlf_isNull(pathColumn)){
  388. objDs.addColumn("dsvaluepath","string");
  389. }
  390. valuePath = pChilds[0].nodePath.substr(0, pChilds[0].nodePath.lastIndexOf("/"+pChilds[0].nodeName));
  391. objDs.setColumn(nAddRow, "dsvaluepath", valuePath);
  392. }
  393. }
  394. objDs.enableevent = false;
  395. for (var i=0;i<pChilds.length;i++){
  396. var grandChilds = pChilds[i].childNodes;
  397. if(gSetParamObj.colNameCase == "upper"){
  398. sNodeName = pChilds[i].nodeName.toUpperCase(); //대문자 처리
  399. }else if(gSetParamObj.colNameCase == "lower"){
  400. sNodeName = pChilds[i].nodeName.toLowerCase();//소문자 처리
  401. }else{
  402. sNodeName = pChilds[i].nodeName //xml 문자 그대로 처리
  403. }
  404. if((pChilds[i].childNodes.length > 1 && pChilds[i].nodeType == 1) || grandChilds.length >= 1 && grandChilds[0].nodeType == 1){
  405. lf_parseXml3(grandChilds, pTagNm + (pTagNm == "" ? "" : "_") + sNodeName);
  406. }else{
  407. if(objDs.rowcount == 0){ //dataset에 row가 없는 경우
  408. nAddRow = objDs.addRow();
  409. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  410. pathColumn = objDs.getColumnInfo("dsvaluepath");
  411. if(utlf_isNull(pathColumn)){
  412. objDs.addColumn("dsvaluepath","string");
  413. }
  414. valuePath = pChilds[i].nodePath.substr(0, pChilds[i].nodePath.lastIndexOf("/"+sNodeName));
  415. objDs.setColumn(nAddRow, "dsvaluepath", valuePath);
  416. }
  417. }
  418. if(gSetParamObj.nullColumnYN == 'Y' || (gSetParamObj.nullColumnYN == 'N' && !utlf_isNull(pChilds[i].textContent))){
  419. var objColumn = objDs.getColumnInfo(sNodeName);
  420. if(utlf_isNull(objColumn)){
  421. objDs.addColumn(sNodeName,"string");
  422. }
  423. var v_val = objDs.getColumn(nAddRow, sNodeName);
  424. if (utlf_isNull(v_val)) {
  425. objDs.setColumn(nAddRow, sNodeName, pChilds[i].textContent);
  426. }
  427. }
  428. gSelectDs = pTagNm;
  429. }
  430. }
  431. objDs.enableevent = true;
  432. sReturnValue = true;
  433. }catch(e){
  434. sReturnValue = false;
  435. gCheckClear = true;
  436. }
  437. return sReturnValue;
  438. }
  439. function lf_convertXmlToDs4(pXmlStr, pParamObj, pTargetNode )
  440. {
  441. if(utlf_isNull(pXmlStr)){
  442. sysf_messageBox("XML 값이 없습니다.", "E");
  443. return "error";
  444. }
  445. var domParser = new DomParser;
  446. var domParser = domParser.parseFromString(pXmlStr);
  447. if (domParser == null){
  448. sysf_messageBox("XML 형식이 잘못 되었습니다.", "E");
  449. return "error";
  450. }
  451. //파라미터 옵션세팅
  452. if(!utlf_isNull(pParamObj)){
  453. gSetParamObj.pathYN = utlf_isNull(pParamObj.pathYN) ? 'Y' : pParamObj.pathYN; //dsvaluepath 컬럼 사용여부 (default 'Y')
  454. gSetParamObj.nullColumnYN = utlf_isNull(pParamObj.nullColumnYN) ? 'Y' : pParamObj.nullColumnYN; //xml 노드가 빈값일 경우 dataset 컬럼 생성 여부
  455. gSetParamObj.colNameCase = utlf_isNull(pParamObj.colNameCase) ? '' : pParamObj.colNameCase //dataset 컬럼 명칭을 대문자/소문자 처리 여부
  456. }else{
  457. gSetParamObj.pathYN = 'Y';
  458. gSetParamObj.nullColumnYN = 'N';
  459. gSetParamObj.colNameCase = "";
  460. }
  461. var tagNm = domParser.documentElement.nodeName;
  462. var nodes ;
  463. if(utlf_isNull(pTargetNode)) {
  464. pTargetNode = "/" + tagNm;
  465. nodes = domParser.getElementsByPath(pTargetNode);
  466. }
  467. else {
  468. nodes = domParser.getElementsByPath(pTargetNode);
  469. }
  470. var nodeName = nodes[0].nodeName;
  471. //nodeName = nodeName.substr(1);
  472. var sValue = lf_parseXml4(nodes, "");
  473. if(!sValue){ //변환 실패시 만들어진 dataset 삭제 처리
  474. for(var i=gDsList.length-1; i >= 0; i--){
  475. var removeObj = this.removeChild(this.objects[gDsList[i]].name);
  476. delete removeObj;
  477. removeObj = null;
  478. }
  479. gDsList = [];
  480. sysf_messageBox("변환이 실패하였습니다.", "E");
  481. return "error";
  482. }
  483. //데이터가 없는 DS 삭제
  484. for(var i=gDsList.length-1; i >= 0; i--){
  485. if(this.objects[gDsList[i]].colcount == 0 || (this.objects[gDsList[i]].colcount == 1 && this.objects[gDsList[i]].colinfos[0].name == "dsvaluepath")){
  486. var tmpObj = this.removeChild(this.objects[gDsList[i]].name);
  487. delete tmpObj;
  488. tmpObj = null;
  489. }
  490. }
  491. gDsList = [];
  492. return "success";
  493. }
  494. /***********************************************************************************************
  495. * 함수명 : lf_parseXml
  496. * 설 명 : DOM객체를 DS으로 변환한다.
  497. * argument : pChilds : xml nodelist 객체
  498. pTagNm : xml node name
  499. * return Type : true : 변환 성공시
  500. false : 변환 실패시
  501. * 작성자 :
  502. ************************************************************************************************/
  503. function lf_parseXml4(pChilds, pTagNm){
  504. var sReturnValue = true;
  505. try{
  506. var nAddRow = 0;
  507. var rtn = this.all[gDsPrifixNm+pTagNm];
  508. var pathColumn;
  509. var valuePath;
  510. var sNodeName;
  511. if(utlf_isNull(rtn)) {
  512. var objDs = new Dataset;
  513. var sDsNameInsert = gDsPrifixNm+pTagNm;
  514. objDs.name = sDsNameInsert;
  515. this.addChild(sDsNameInsert, objDs);
  516. gDsList.push(gDsPrifixNm+pTagNm);
  517. }else{
  518. objDs = this.all[gDsPrifixNm+pTagNm];
  519. if(gSelectDs != pTagNm) objDs.clear(); //dsset 초기화
  520. nAddRow = objDs.addRow();
  521. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  522. pathColumn = objDs.getColumnInfo("dsvaluepath");
  523. if(utlf_isNull(pathColumn)){
  524. objDs.addColumn("dsvaluepath","string");
  525. }
  526. valuePath = pChilds[0].nodePath.substr(0, pChilds[0].nodePath.lastIndexOf("/"+pChilds[0].nodeName));
  527. objDs.setColumn(nAddRow, "dsvaluepath", valuePath);
  528. }
  529. }
  530. objDs.enableevent = false;
  531. for (var i=0;i<pChilds.length;i++){
  532. var grandChilds = pChilds[i].childNodes;
  533. if(gSetParamObj.colNameCase == "upper"){
  534. sNodeName = pChilds[i].nodeName.toUpperCase(); //대문자 처리
  535. }else if(gSetParamObj.colNameCase == "lower"){
  536. sNodeName = pChilds[i].nodeName.toLowerCase();//소문자 처리
  537. }else{
  538. sNodeName = pChilds[i].nodeName //xml 문자 그대로 처리
  539. }
  540. if((pChilds[i].childNodes.length > 1 && pChilds[i].nodeType == 1) || grandChilds.length >= 1 && grandChilds[0].nodeType == 1){
  541. lf_parseXml4(grandChilds, pTagNm + (pTagNm == "" ? "" : "_") + sNodeName);
  542. }else{
  543. if(objDs.rowcount == 0){ //dataset에 row가 없는 경우
  544. nAddRow = objDs.addRow();
  545. if(gSetParamObj.pathYN == 'Y'){ //dsvaluepath 컬럼을 사용할 경우
  546. pathColumn = objDs.getColumnInfo("dsvaluepath");
  547. if(utlf_isNull(pathColumn)){
  548. objDs.addColumn("dsvaluepath","string");
  549. }
  550. valuePath = pChilds[i].nodePath.substr(0, pChilds[i].nodePath.lastIndexOf("/"+sNodeName));
  551. objDs.setColumn(nAddRow, "dsvaluepath", valuePath);
  552. }
  553. }
  554. if(gSetParamObj.nullColumnYN == 'Y' || (gSetParamObj.nullColumnYN == 'N' && !utlf_isNull(pChilds[i].textContent))){
  555. var objColumn = objDs.getColumnInfo(sNodeName);
  556. if(utlf_isNull(objColumn)){
  557. objDs.addColumn(sNodeName,"string");
  558. }
  559. objDs.setColumn(nAddRow, sNodeName, pChilds[i].textContent);
  560. }
  561. gSelectDs = pTagNm;
  562. }
  563. }
  564. objDs.enableevent = true;
  565. sReturnValue = true;
  566. }catch(e){
  567. sReturnValue = false;
  568. gCheckClear = true;
  569. }
  570. return sReturnValue;
  571. }
  572. ]]></Script>