Kbase P187732: Using the EXPORT statement generates invalid XML from a longchar.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/05/2011 |
|
Status: Unverified
SYMPTOM(s):
Using the EXPORT statement generates invalid XML from a longchar.
The EXPORT statement writes XML with the XML code page between exclamation marks.
The following code generates the invalid XML.
DEFINE VARIABLE vFilename AS CHARACTER NO-UNDO.
DEFINE VARIABLE vTestProd AS CHARACTER NO-UNDO.
DEFINE VARIABLE vConflict-Id AS CHARACTER NO-UNDO.
DEFINE VARIABLE vSysPath AS CHARACTER NO-UNDO.
DEFINE VARIABLE hSAXWriter AS HANDLE NO-UNDO.
DEFINE VARIABLE vLog AS LOGICAL NO-UNDO.
DEFINE VARIABLE vSendXML AS LONGCHAR NO-UNDO.
DEFINE VARIABLE vDebug AS LOGICAL NO-UNDO INIT FALSE.
DEFINE VARIABLE hDoc AS HANDLE NO-UNDO.
/* Keep vFilename empty when using LONGCHAR */
vFilename = "" /*"test-file.xml"*/.
FIX-CODEPAGE(vSendXML) = 'iso8859-1'.
CREATE SAX-WRITER hSAXWriter.
hSAXWriter:FORMATTED = TRUE.
hSAXWriter:ENCODING = "ISO-8859-1".
IF vFileName = "" THEN
vLog = hSAXWriter:SET-OUTPUT-DESTINATION("longchar", vSendXML).
ELSE
vLog = hSAXWriter:SET-OUTPUT-DESTINATION("file", vFilename).
vLog = hSAXWriter:START-DOCUMENT().
vLog = hSAXWriter:START-ELEMENT("transfer").
vLog = hSAXWriter:INSERT-ATTRIBUTE("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance").
vLog = hSAXWriter:START-ELEMENT("record").
vLog = hSAXWriter:INSERT-ATTRIBUTE("conflict-id", vConflict-Id).
vLog = hSAXWriter:INSERT-ATTRIBUTE("unionno", "4").
vLog = hSAXWriter:INSERT-ATTRIBUTE("memberno", "1").
vLog = hSAXWriter:INSERT-ATTRIBUTE("birthday", "01.01.1960").
vLog = hSAXWriter:START-ELEMENT("mobile").
vLog = hSAXWriter:WRITE-DATA-ELEMENT("mobileno", "12345678").
vLog = hSAXWriter:WRITE-DATA-ELEMENT("mobilestamp", STRING(NOW)).
vLog = hSAXWriter:WRITE-DATA-ELEMENT("mobileby", "nn").
vLog = hSAXWriter:END-ELEMENT("mobile").
vLog = hSAXWriter:END-ELEMENT("record").
vLog = hSAXWriter:END-ELEMENT("transfer").
vLog = hSAXWriter:END-DOCUMENT().
DELETE OBJECT hSAXWriter.
IF vFilename = "" THEN DO:
OUTPUT TO test-longchar.xml.
EXPORT vSendXML.
OUTPUT CLOSE.
END.
The resulting XML looks like:
!ISO8859-1!<?xml version="1.0" encoding="ISO-8859-1"?>
<transfer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record conflict-id="" unionno="4" memberno="1" birthday="01.01.1960">
<mobile>
<mobileno>12345678</mobileno>
<mobilestamp>13/05/2011 15:33:06.390+01:00</mobilestamp>
<mobileby>nn</mobileby>
</mobile>
</record>
</transfer>
FACT(s) (Environment):
All Supported Operating Systems
OpenEdge 10.x
CAUSE:
The EXPORT statement has no notion of the XML code page or the formatting of XML content. Export simply outputs data as a stream in a standard ABL output format.
FIX:
To resolve the issue use a more appropriate method of exporting the XML, for example with the x-document SAVE method.
DEFINE VARIABLE hDoc AS HANDLE NO-UNDO.
CREATE X-DOCUMENT hDoc.
hDoc:LOAD("Longchar",vSendXML,FALSE).
hDoc:SAVE("FILE","newXML.xml").