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

Re: Query on http_parse_xml_string



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>
    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@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

      --------------------------------------------------------------------
          ---
      References
        1. mailto:[4]abhijit.fulambrikar@xxxxxxxxx
        2. [5]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
      --------------------------------------------------------------------
      ---

References

    1. mailto:alan0307d@xxxxxxxxx
    2. mailto:abhijit.fulambrikar@xxxxxxxxx
    3. http://www.scottklement.com/mailman/listinfo/ftpapi
    4. mailto:abhijit.fulambrikar@xxxxxxxxx
    5. http://www.scottklement.com/mailman/listinfo/ftpapi
    6. 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
-----------------------------------------------------------------------

     H DFTACTGRP(*NO) BNDDIR('HTTPAPI')

      /include httpapi_h

     D DataIn          s           1000a   varying
     D xmlError        s              1n
     D msgno           s             10i 0 inz(0)
     D log             s             68a   dim(1000)

      /free
        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 &amp; other parts</Text> +
                        </Comment> +
                    </PopulateComments>' into :DataIn;

        xmlError = http_parse_xml_string( %addr(dataIn: *data)
                                        : %len(dataIn)
                                        : 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 
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------