[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Parsing XML with a value that contains a double quote
Hello again,
I'm using a pointer to read the large amount of data being returned in
the http_url_post_xml response. I know how to use a pointer to read
data coming in from a file in the IFS, but what about data that simply
resides in memory? I'm sure I'm just missing something very elementary
here.
Here are relevant snippets of my code:
I've got a data structure that contains a pointer and a length:
D value_t ds qualified
D valptr *
D len 10i 0
I've altered my EndOfElement prototype definition to include the data
structure:
D EndOfElement PR
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D retval likeds(value_t)
D attrs * dim(32767)
D const options(*varsize)
I'm using http_XmlReturnPtr:
http_XmlReturnPtr(*ON);
My call to the web service looks like this:
rc = http_url_post_xml(
'https://someurl.com/services/eoservice.asmx'
: %addr(SOAP)+2
: %len(SOAP)
: %paddr(StartOfElement)
: %paddr(EndOfElement)
: *NULL );
The return tag "DeliverExamOneContentResult" contains all the
unescaped data that I want to write to a temporary file in the IFS, so
I can read it back in and parse it with http_parse_xml_stmf.
P EndOfElement B
D EndOfElement PI
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D retval likeds(value_t)
D attrs * dim(32767)
D const options(*varsize)
D writeToFile PR 10I 0 ExtProc('write')
D fildes 10i 0 value
D buf 65535A const options(*varsize)
D bytes 10U 0 value
D xmlhdr s 80a varying
D fd s 10i 0
/free
if (%trim(name) <> 'DeliverExamOneContentResult');
return;
endif;
// ------------------------------------------
// create new stream file in IFS
// ------------------------------------------
embfile = http_tempfile();
// ------------------------------------------
// Open stream file for appending data
// and write embedded XML document to it
// ------------------------------------------
fd = open(embfile: O_WRONLY+O_TEXTDATA);
xmlhdr= '<?xml version="1.0"?>' + x'0d25';
writeToFile(fd: xmlhdr: %len(xmlhdr));
// here's where the problem is - how to I retrieve the data from
memory?
// Whenever I use %addr(retval.valptr), I get a compile error:
// The type of the parameter specified for the call does not
match the prototype.
dow writeToFile(fd: %addr(retval.valptr) : retval.len)>=0;
writeToFile(fd: %addr(retval.valptr) : retval.len);
enddo;
callp close(fd);
//endsl;
/end-free
P E
I see that retval.valptr is a pointer and parameter buf in writeToFile
is a character field---how do I return the data at pointer
retval.valptr? What am I missing?
Thanks for your help--again!
Kim Gibson
From: Kim Gibson
Sent: Tuesday, December 21, 2010 3:28 PM
To: 'ftpapi@xxxxxxxxxxxxxxxxxxxxxx'
Subject: RE: Parsing XML with a value that contains a double quote
Great--thanks, Scott! I knew there had to have been some cool feature.
I appreciate your help. Have a wonderful holiday!
Kim Gibson
On 12/21/2010 2:44 PM, Kim Gibson wrote:
> Any quick ideas on solutions?? I'm doing some research on this end,
> and chances are the solution will be absurdly simple.
HTTPAPI has a feature called HTTP_xmlReturnPtr() that lets HTTPAPI
return the 'value' parameter from an XML document as a pointer to
allocated memory. That allows the value of an XML element to exceed
65535. (Indeed, should be capable of 16mb)
Here's a link to a previous discussion of HTTP_xmlReturnPtr:
[1]http://www.scottklement.com/archives/ftpapi/201008/msg00110.html
If you use that feature, you should be able to write all of the data
from your "embedded XML" into an IFS stream file. (Which, of course,
doesn't have a size limit.) and then your 2nd parse should work
properly.
----------------------------------------------------------------------
-
This is the FTPAPI mailing list. To unsubscribe, please go to:
[2]http://www.scottklement.com/mailman/listinfo/ftpapi
References
1. http://www.scottklement.com/archives/ftpapi/201008/msg00110.html
2. 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
-----------------------------------------------------------------------