In net.data there is an htmlencode BIF that replaces special characters
with their HTML equivalent
Not sure if this is an API that can be accessed from RPG
Table 44. Character Escape Codes for HTML
Character Name Code
SPACE Space  
" Double quote "
# Number sign #
% Percent %
& Ampersand &
[ Left bracket (
] Right bracket )
+ Plus +
\ Slash /
: Colon :
; Semicolon ;
< Less than <
= Equals =:
Greater than >:
? Question mark ?:
@ At sign @
/ Backslash \
| Carat ^
{ Left brace {
| Straight line |
} Right brace }
x Tilde ~
-----Original Message-----
From: ANN GERLING [
mailto:agerling@xxxxxxx]
Sent: Thursday, July 05, 2007 11:39 AM
To: RPG400-L@xxxxxxxxxxxx
Subject: XML creation of iSeries UDB data - Characters that are not
allowed.
I am creating a process to archive data in iSeries database files to XML
in an IFS file.
Some of the data in the iSeries UDB file has special characters in the
text data that cause the document to "not be well formed". For example
the use of & (ampersand) for and in names.
I have resarched writing out XML and am trying to write the data out in
UNICODE and I thought this would take care of the errors that it found
unacceptable characters.
I was wondering if anyone could see where I am going wrong. I have
thought about scanning and replacing the 5 known characters that cause
this error. For example replace & with & works. But I was hoping
to convert the text to UNICODE and that solve the problem. Thanks for
any ideas.
Ann Gerling
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
-------------------------
Here is my code for creating the file and writing to it on the IFS.
D Flag1 S 10U 0
D Flag2 S 10U 0
D ccsid S 10U 0 inz(819)
D txtcreatid S 10U 0 inz(1208)
D CRLF C x'0d25'
D Slash C x'61'
D LCarot C x'4C'
D RCarot C x'6E'
D Dash C x'60'
. (other code)
* To Create File
C Eval Flag1 = O_WRONLY + O_CREAT + O_CODEPAGE
C + O_TRUNC
* To write to the file
C Eval Flag2 = O_RDWR + O_TEXTDATA
*
C Eval Mode = S_IRUSR + S_IWUSR + S_IRGRP
C + S_IWGRP + S_IROTH + S_IWOTH
* Open file setting code page
c callp unlink(%Trimr(FILEWP))
c Eval fd = open(%Trimr(FILEWP):Flag1:Mode:ccsid
c :txtcreatid)
c callp close(fd)
*
* Open file to write data
c Eval fd = open(%Trimr(FILEWP): Flag2)
.(other code)
* Write out Start and End of Field Element
C If FieldValue <> *blanks
C EVAL RecOut = LCarot + %TrimR(WHFLDEX) + RCarot
C + %Trim(FieldValue)
C + LCarot + Slash + %TrimR(WHFLDEX)
C + RCarot + CRLF
C Else
C EVAL RecOut = LCarot + %TrimR(WHFLDEX) + ' '
C + Slash + RCarot + CRLF
C EndIf
*
C Eval RecLen = %len(%Trim(RecOut))
c callp write(fd:%addr(RecOut):
C RecLen)
Here is my test result file contents. It errors on the record (line 18)
with the ampersand:
<?xml version="1.0"?>
<!-- File = HPS02/TESTXML/P973 - Currency Conversion Table--> <P973>
<R973> <RowInfo> <CCCURR>CA D</CCCURR> <CCFRDT>20070705</CCFRDT>
<CCTODT>20070711</CCTODT> <CCRATE>.870110</CCRATE> </RowInfo> <RowInfo>
<CCCURR>CAD</CCCURR> <CCFRDT>20061214</CCFRDT> <CCTODT>20061220</CCTODT>
<CCRATE>.870110</CCRATE> </RowInfo> <RowInfo> <CCCURR>CAD&</CCCURR>
<CCFRDT>20061221</CCFRDT> <CCTODT>20070103</CCTODT>
<CCRATE>.865230</CCRATE> </RowInfo> <RowInfo> <CCCURR>CA/D</CCCURR>
<CCFRDT>20070705</CCFRDT> <CCTODT>20070711</CCTODT>
<CCRATE>.870110</CCRATE> </RowInfo> </R973> </P973>
As an Amazon Associate we earn from qualifying purchases.