[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Query on http_parse_xml_string



Hello Abhijit,

Here's the reason why you get the error:

    exec sql values upper(trim(:DataIn)) into :xmlData;

See that upper() function?  It converts the data to uppercase.

XML is a case-sensitive environment. While & is a predefined and 
well-known entity, & is not. In XML uppercase is not treated as the 
same thing as lowercase.



On 1/12/2012 7:37 PM, Abhijit Fulambrikar wrote:
> 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 <sk@xxxxxxxxxxxxxxxx
> <mailto: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&amp; 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&AMP; 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 "&amp;" ,
>         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]alan0307d@xxxxxxxxx <mailto:alan0307d@xxxxxxxxx>>
>             wrote:
>
>                 The&amp 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
>
>         &quot,
>                 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]abhijit.fulambrikar@xxxxxxxxxxx
>         <mailto: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"&amp;" as
>         shown
>                 below
>         <Text>Replace engine oil&amp; 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]http://www.scottklement.__com/mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>
>
>           ------------------------------__------------------------------__--------
>                   ---
>               References
>
>                 1. mailto:[4]abhijit.fulambrikar@xxxxxxxxxxx
>         <mailto:abhijit.fulambrikar@xxxxxxxxx>
>                 2.
>         [5]http://www.scottklement.__com/mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>
>           ------------------------------__------------------------------__--------
>               ---
>               This is the FTPAPI mailing list.  To unsubscribe, please
>         go to:
>               [6]http://www.scottklement.__com/mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>
>           ------------------------------__------------------------------__--------
>               ---
>
>         References
>
>             1. mailto:alan0307d@xxxxxxxxx <mailto:alan0307d@xxxxxxxxx>
>             2. mailto:abhijit.fulambrikar@xxxxxxxxxxx
>         <mailto:abhijit.fulambrikar@xxxxxxxxx>
>             3. http://www.scottklement.com/__mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>             4. mailto:abhijit.fulambrikar@xxxxxxxxxxx
>         <mailto:abhijit.fulambrikar@xxxxxxxxx>
>             5. http://www.scottklement.com/__mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>             6. http://www.scottklement.com/__mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>
>
>
>
>         ------------------------------__------------------------------__-----------
>         This is the FTPAPI mailing list.  To unsubscribe, please go to:
>         http://www.scottklement.com/__mailman/listinfo/ftpapi
>         <http://www.scottklement.com/mailman/listinfo/ftpapi>
>         ------------------------------__------------------------------__-----------
>
>
>
>     -----------------------------------------------------------------------
>     This is the FTPAPI mailing list.  To unsubscribe, please go to:
>     http://www.scottklement.com/mailman/listinfo/ftpapi
>     -----------------------------------------------------------------------
>
>

-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------