如何拆分数据并导出为XML?

时间:2018-12-24 04:04:38

标签: openedge progress-4gl

在进度数据库中有一个名为gdmf_customer的表,在该表中有一个名为shift time的字段,实际上它有15条记录(06:00,07:00等)。这里我只是将复制的gdmf_customer缓冲到tt_data 。在tt_data临时表中有一个名为tt_shift的字段(全部数据来自缓冲区复制后的gdmf_customer)。现在我的问题是我需要拆分班次并导出为XML。请参见下面的代码

FOR EACH gdmf_shift NO-LOCK:BUFFER-COPY gdmf_shift EXCEPT shift_obj TO tt_shift.END.
 hOutSAXDocument:START-ELEMENT("Row").
    hOutSAXDocument:INSERT-ATTRIBUTE("id","5").   
         hOutSAXDocument:START-ELEMENT("Column").
         hOutSAXDocument:INSERT-ATTRIBUTE("id","C1").  
         hOutSAXDocument:WRITE-DATA-ELEMENT("Column",string(tt_orderinfo.shft_start_hour,"HH:MM")).
         hOutSAXDocument:WRITE-DATA-ELEMENT("Column",string(tt_orderinfo.shft_stop_hour,"HH:MM")).

从上面的代码中可以看到,我有一个开始和结束的时间,并以XML格式显示,但是我需要的是每个小时都位于tt_data中。 See Like this

1 个答案:

答案 0 :(得分:0)

在我看来,您在错误的位置输入了END语句。

FOR EACH gdmf_shift NO-LOCK:

 BUFFER-COPY gdmf_shift EXCEPT shift_obj TO tt_shift.  /* I don't see why you are doing this but maybe there is more code than is being shown */

 hOutSAXDocument:START-ELEMENT("Row").
 hOutSAXDocument:INSERT-ATTRIBUTE("id","5").   
 hOutSAXDocument:START-ELEMENT("Column").
 hOutSAXDocument:INSERT-ATTRIBUTE("id","C1").  
 hOutSAXDocument:WRITE-DATA-ELEMENT("Column",string(tt_orderinfo.shft_start_hour,"HH:MM")).
 hOutSAXDocument:WRITE-DATA-ELEMENT("Column",string(tt_orderinfo.shft_stop_hour,"HH:MM")).

  /* you  probably want to end the element here */

END.

似乎您可能认为Progress 4GL / ABL有点像SQL,其中返回了“结果集”并作为整体起作用。 4GL不是那样的。 FOR EACH是一个循环块-每行分别返回以供您执行。虽然从表面上看相似,但它与SQL SELECT不同。

您的原始代码仅作用于最后一行,因为它恰好位于“ FOR EACH x WHERE y:... END”末尾的“范围内”。