Question How To Get Rid Of The Clones?

zarok

New Member
Good afternoon, ladies and gentlemen. There is a "input.hml" file. What is it we do not know the structure is hidden. It is necessary to read the file by DOM and SAX method written in the file. The problem is that when this method ispozuetsya "lOK = hSAXWriter: WRITE-DATA-ELEMENT (hParent: name, ttr.goo).". We are 2 identical tag. I know why they are created, but can not do so to the clones did not. help me please.
Code:
DEFINE VARIABLE hSAXWriter AS HANDLE NO-UNDO.
DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.

CREATE SAX-WRITER hSAXWriter.
hSAXWriter:FORMATTED = TRUE.
hSAXWriter:ENCODING = "CP866".
lOK = hSAXWriter:SET-OUTPUT-DESTINATION("file", "cust1.xml").
lOK = hSAXWriter:START-DOCUMENT().

def var iii as int.

DEFINE VARIABLE hDoc AS HANDLE NO-UNDO.
DEFINE VARIABLE hRoot AS HANDLE NO-UNDO.
DEFINE VARIABLE good AS LOGICAL NO-UNDO.

define temp-table ttr
Field goo as char.
CREATE X-DOCUMENT hDoc.
CREATE X-NODEREF hRoot.

hDoc:LOAD("file","myfile3.xml",FALSE).

hDoc:GET-DOCUMENT-ELEMENT(hRoot).

RUN GetChildren(hRoot, 1).

for each ttr:
disp goo format 'x(30)'.
end.

DELETE OBJECT hDoc.
DELETE OBJECT hRoot.

PROCEDURE GetChildren:
DEFINE INPUT PARAMETER hParent AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER level AS INTEGER NO-UNDO.

DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE ix AS INTEGER NO-UNDO.

DEFINE VARIABLE hNoderef AS HANDLE NO-UNDO.
DEFINE VARIABLE hNoderef2 AS HANDLE NO-UNDO.

CREATE X-NODEREF hNoderef.
CREATE X-NODEREF hNoderef2.
&if hNoderef:name <> "#text" &then &do:  ~

if  hParent:name <> "#text" then
lOK = hSAXWriter:START-ELEMENT(hParent:name).
&endif.

REPEAT i = 1 TO hParent:NUM-CHILDREN:
hParent:GET-CHILD(hNoderef,i).

  IF hNoderef:name <> "#text" then do:

  REPEAT ix = 1 to hNoderef:NUM-CHILDREN:
  hNoderef:GET-CHILD(hNoderef2,ix).
  if hNoderef2:node-value <> " " then do:
  create ttr.
  ttr.goo = hNoderef2:node-value.
  end.
  END.
  END.

  RUN GetChildren(hNoderef, (level + 1)).

END.
IF  hParent:name <> "#text" then do:
  if iii < 2 then do:
  lOK = hSAXWriter:WRITE-DATA-ELEMENT (hParent:name, ttr.goo).
  iii = iii + 1.
end.
else iii = 0.


lOK = hSAXWriter:END-ELEMENT(hParent:name).
end.

DELETE OBJECT hNoderef.
END PROCEDURE.
 
Last edited by a moderator:
Top