Whoa... let's take a step back.
- You are trying to handle POSTed data, so there's a reasonable chance that you can't trust the 'length="..."' information.
- There is also a concern (because it's POSTed data) of corruptions involving "file" tags somehow being present within the binary data.
- The binary chunks are apparently rather large, so you might run into memory issues if your approach involves having too many copies of too much data in perl variables.
- Now you seem to be hinting that a given POST might contain two or more segments within "file" tags.
- You haven't said much about the content outside the "file" tags, but apparently it's supposed to be valid XML once the "file" tags are removed.
I think you'd be better off if your client(s) used ftp to transfer the binary stuff as data files (with distinct file names), and then just put references to the file names in the XML stream that gets posted. This way, there's nothing in the XML stream except valid XML, and doing stuff with the binary data will be easier, putting less load on the overall process.
But if there's no chance of doing it sensibly like that, then you just need to use a while loop for handling more than one <file/>...</file> element in the data, and hope for the best:
while ( $indata =~ s{<file fiop="([^"]+)" length="(\d+)"/>(.*?)</file>
+}{}s )
{
( $fiop, $fileLength, $fileData ) = ( $1, $2, $3 );
# do something with $fileData, possibly after checking that
# $fileLength == length( $fileData ), if that matters to you
}
if ( $indata =~ m{<file fiop=|</file>} )
{
# there's something wrong with the posted data, so it's still
# not suitable for XML parsing...
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.