[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Query on http_parse_xml_string
Hi Scott,
Thank you so much for your help. I took your program and it works great
on my system as well.
The parser is able to parse the special characters.
Now the difference in my program is that the variable DataIn is
declared as sqltype(clob:4096000).
Also my program accepts the DataIn as an input parameter.
I have broken your program in two programs and made it similar to my
program with string as clob type.
I am able to replicate the issue.
Attaching the programs below. You should be able to replicate it on
your system.
Actually we had declares a variable as clob in copy book and later all
other variables declared
in program are referencing the same definition (LikeDS). We did this
because it would be easy to change the type of the variable if
required.
Thank you,
Abhijit
On Thu, Jan 12, 2012 at 2:35 PM, Scott Klement <[1]sk@xxxxxxxxxxxxxxxx>
wrote:
Hi Abhijit,
Please understand this: In order to help you, we need enough
information to reproduce the problem.
I've spent a considerable amount of time (more than an hour) trying
to reproduce your problem, but I just can't get it to fail as you
describe. I need to know what you're doing that makes it fail.
Here's what I'd like to do:
1) I'll attach the source code for my "test" program to this
message. My program is a complete program that you can load/run on
your system (just copy/paste it to a source member and compile it.)
2) I need you to reply to this message, and do me the same courtesy.
Attach a complete program (preferably, by modifying mine) that I can
copy/paste to a source member, compile and run. Your copy should
reproduce the Expat error that you described.
Thanks!
On 1/12/2012 10:33 AM, Abhijit Fulambrikar wrote:
Thanks Alan.
This is how I am creating the test data in the SQLRPG program.
exec sql
values '<PopulateComments> +
<ServiceRequest>406725</ServiceRequest> +
<Comment> +
<Line>1</Line> +
<CreateDate>20111227</CreateDate> +
<CreateTime>145232</CreateTime> +
<Type>CAUSE</Type> +
<Text>Engine oil leak& test</Text> +
</Comment> +
<Comment> +
<Line>2</Line> +
<CreateDate>20111227</CreateDate> +
<CreateTime>145232</CreateTime> +
<Type>CORRECTION</Type> +
<Text>Replace engine oil and other parts</Text> +
</Comment> +
</PopulateComments>' into :DataIn;
Input data
XMLDATA.@XMLDATA_DATA =
....5...10...15...20...25...30...35...40...45...50...55...60
1 '<POPULATECOMMENTS>
<SERVICEREQUEST>406725</SERVICEREQUEST> <'
61 'COMMENT> <LINE>1</LINE>
<CREATEDATE>20111227</CREATEDATE> <C'
121 'REATETIME>145232</CREATETIME> <TYPE>CAUSE</TYPE>
<TEXT>ENGIN'
181 'E OIL LEAK& TEST</TEXT> </COMMENT> <COMMENT>
<LINE>2</L'
241 'INE> <CREATEDATE>20111227</CREATEDATE>
<CREATETIME>145232</C'
301 'REATETIME> <TYPE>CORRECTION</TYPE> <TEXT>REPLACE ENGINE
OIL '
361 'AND OTHER PARTS</TEXT> </COMMENT> </POPULATECOMMENTS>
'
421 '
'
Error
DATAOUT.@XMLDATA_DATA =
....5...10...15...20...25...30...35...40...45...50...55...60
1 '<?xml version="1.0"?><POPULATECOMMENTS><Error>XML parse
fail'
61 'ed at line 1, col 191: undefined
entity</Error></POPULATECOM'
121 'MENTS>
'
181 '
'
241 '
'
When I change the Input Data and put& instead of "&" , below
error is returned
DATAOUT.@XMLDATA_DATA =
....5...10...15...20...25...30...35...40...45...50...55...60
1 '<?xml version="1.0"?><POPULATECOMMENTS><Error>XML parse
fail'
61 'ed at line 1, col 192: not well-formed (invalid
token)</Erro'
121 'r></POPULATECOMMENTS>
'
Is the function "http_parse_xml_string" capable of handling the
special
characters.
Thanks for your help.
Thanks& Regards,
Abhijit
On Wed, Jan 11, 2012 at 6:11 PM, Alan
Campin<[1][2]alan0307d@xxxxxxxxx>
wrote:
The& is the same as putting an& in the xml because& are
special
characters I believe. The problem is that I don't think the
EXPAT
parser that Scott uses recognizes the& special strings like
",
etc.
When I dealt with problem it put the xml to a stream file and
used
XML-SAX to parse it and that recognized the special characters.
I
think
this may be occurring because you have an xml file embedded
inside
the
main file so you have to extract the files from inside and then
parse
it separately. This is not a problem if the resulting file is
relatively small. It gets trickee if the file embedded inside is
very
big and won't fit in a variable. Then you need to write to a
stream
file.
Would need to see the entire XML.
On Wed, Jan 11, 2012 at 4:24 PM, Abhijit Fulambrikar
<[1][2][3]abhijit.fulambrikar@xxxxxxxxx> wrote:
Hi,
I have a question regarding the parsing of special character's
in
XML.
I am using "http_parse_xml_string" to parse the XML string.
Please
see
the
code below
xmlError = http_parse_xml_string(%addr(xmlData.@xmlData_Data):
xmlData.@xmlData_Len: 0: *null: xmlHandler: *null)<> 0;
if xmlError;
xmlAddRootAndElement(Process: ERROR: http_error());
endif;
The XML data which I am sending has the below tag which has
special
character "&". The character is formatted as"&" as shown
below
<Text>Replace engine oil& other parts</Text>
The error which is returned from http_parse_xml_string is as
below
XML parse failed at line 1, col 349: undefined entity
When I tried with the below data
<Text>Replace engine oil& other parts</Text>
I get the error as
XML parse failed at line 1, col 350: not well-formed (invalid
token)
Please let me know if I am following some incorrect process.
Thanks for
your help.
Regards,
Abhijit
--------------------------------------------------------------------
---
This is the FTPAPI mailing list. To unsubscribe, please go
to:
[2][3][4]http://www.scottklement.com/mailman/listinfo/ftpapi
--------------------------------------------------------------------
---
References
1. mailto:[4][5]abhijit.fulambrikar@xxxxxxxxx
2. [5][6]http://www.scottklement.com/mailman/listinfo/ftpapi
--------------------------------------------------------------------
---
This is the FTPAPI mailing list. To unsubscribe, please go to:
[6][7]http://www.scottklement.com/mailman/listinfo/ftpapi
--------------------------------------------------------------------
---
References
1. mailto:[8]alan0307d@xxxxxxxxx
2. mailto:[9]abhijit.fulambrikar@xxxxxxxxx
3. [10]http://www.scottklement.com/mailman/listinfo/ftpapi
4. mailto:[11]abhijit.fulambrikar@xxxxxxxxx
5. [12]http://www.scottklement.com/mailman/listinfo/ftpapi
6. [13]http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
[14]http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
--------------------------------------------------------------------
---
This is the FTPAPI mailing list. To unsubscribe, please go to:
[15]http://www.scottklement.com/mailman/listinfo/ftpapi
--------------------------------------------------------------------
---
References
1. mailto:sk@xxxxxxxxxxxxxxxx
2. mailto:alan0307d@xxxxxxxxx
3. mailto:abhijit.fulambrikar@xxxxxxxxx
4. http://www.scottklement.com/mailman/listinfo/ftpapi
5. mailto:abhijit.fulambrikar@xxxxxxxxx
6. http://www.scottklement.com/mailman/listinfo/ftpapi
7. http://www.scottklement.com/mailman/listinfo/ftpapi
8. mailto:alan0307d@xxxxxxxxx
9. mailto:abhijit.fulambrikar@xxxxxxxxx
10. http://www.scottklement.com/mailman/listinfo/ftpapi
11. mailto:abhijit.fulambrikar@xxxxxxxxx
12. http://www.scottklement.com/mailman/listinfo/ftpapi
13. http://www.scottklement.com/mailman/listinfo/ftpapi
14. http://www.scottklement.com/mailman/listinfo/ftpapi
15. http://www.scottklement.com/mailman/listinfo/ftpapi
d DataIn s sqltype(clob:4096000)
/free
clear DataIn;
exec sql
values '<PopulateComments> +
<ServiceRequest>406725</ServiceRequest> +
<Comment> +
<Line>1</Line> +
<CreateDate>20111227</CreateDate> +
<CreateTime>145232</CreateTime> +
<Type>CAUSE</Type> +
<Text>Engine oil leak & test</Text> +
</Comment> +
<Comment> +
<Line>2</Line> +
<CreateDate>20111227</CreateDate> +
<CreateTime>145232</CreateTime> +
<Type>CORRECTION</Type> +
<Text>Replace engine oil & other parts</Text> +
</Comment> +
</PopulateComments>' into :DataIn;
exec sql call Program2(:DataIn);
*inlr = *on;
return;
H DFTACTGRP(*NO) BNDDIR('HTTPAPI')
/include httpapi_h
/copy qrpglesrc,TESTAPI_H
d PROGRAM2 pr extpgm('PROGRAM2')
d DataIn likeds(@xmlData)
d PROGRAM2 pi
d DataIn likeds(@xmlData)
d XmlData ds likeds(@xmlData)
D* DataIn s 1000a varying
D xmlError s 1n
D msgno s 10i 0 inz(0)
D log s 68a dim(1000)
D xmlHandler Pr
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D attrs * dim(32767)
D const options(*varsize)
D ShowLog Pr
/free
clear xmlData;
exec sql values upper(trim(:DataIn)) into :xmlData;
xmlError = http_parse_xml_string( %addr(xmlData.@xmlData_Data)
: xmlData.@xmlData_Len
: 0
: *null
: %paddr(xmlHandler)
: *null ) <> 0;
if xmlError;
msgno += 1;
log(msgno) = http_error();
endif;
ShowLog();
*inlr = *on;
/end-free
P xmlHandler B
D PI
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D attrs * dim(32767)
D const options(*varsize)
/free
msgno += 1;
log(msgno) = name + '=' + value;
/end-free
P E
P ShowLog B
D ShowLog PI
D QUILNGTX PR ExtPgm('QUILNGTX')
D text 68a dim(1000) const
D length 10i 0 const
D msgid 7a const
D qualmsgf 20a const
D errorCode 20i 0 const
/free
QUILNGTX( log
: msgno * %len(log(1))
: *blanks
: *blanks
: 0 );
msgno = 0;
/end-free
P E
d @xmlData s sqltype(clob:4096000)
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------