Thanks a lot for that Jan, that may be the way for me to go.
The prettyprint stack is nice, by the way, and I'm sure you're aware
but for the benefit of any newbies the stack can be sped up a lot by
putting everything into a global variable first before putting it into
the field at the end.

regards
Martin

On 27/01/07, Jan Schenkel <[EMAIL PROTECTED]> wrote:
--- Martin Blackman <[EMAIL PROTECTED]> wrote:
> Dear listfolks,
>
> I've noticed that creating an xml tree from a file
> using
> 'revcreatexmltree' can take up anything from 15 to
> 30 times the size
> of the file on disk in memory.  Does that sound like
> Rev is doing
> anything peculiar to those with more understanding
> of the underlying
> behaviour ?
>
> I need to deal with some reasonably large files and
> so need to
> consider ways to avoid changing the user's computer
> into treacle. (
> I've been able to grind my 512MB laptop practically
> to standstill but
> my desktop seems to manage OK even when its physical
> memory available
> is very low)
>
> [snip]
>
> Any thoughts ?
> Many thanks
> Martin Blackman
>

Hi Martin,

If you're handling huge XML files and don't actually
need to manipulate the data in the DOM tree (Document
Object Model), you could use the SAX approach (Simple
API for XML).
Rather than going through the entire file and building
up a huge tree structure in memory, SAX parsers send
messages as they traverse the XML text. Messages are
sent at the start and end of the parsing process, as
well as at the start abnd end of a tag, and the
element data.
So if you're just pulling information out of an XML
file, SAX parsers can save you a lot of memory.

In Revolution, you'll use a variation on the
'revCreateXMLTreeFromFile' function and trap the
'revXMLStartTree', 'revStartXMLNode',
'revStartXMLData', 'revEndXMLNode' and 'revXMLEndTree'
messages.
See the dictionary for more information on the
peculiarities of these messages. In a nutshell, when
you pass 'true' as the final parameter of the
'revCreateXMLTreeFromFile' function, the above
collection of messages will be sent to the current
card as it parses the XML structure.

I recently made a little stack that uses this approach
to 'pretty print' XML files that were produced by
another app and weren't meant for human consumption.
You can download this as a sample stack at the
following URL:
<http://www.quartam.com/tutorials/xmlprettyprint.rev>

For those who just want the script, here's what I put
in the card script:
##
on PrettyPrint pFilePath
 get
revCreateXMLTreeFromFile(pFilePath,false,false,true)
end PrettyPrint

on DisplayStatus pStatus
 put pStatus into field "fCurrentMessage"
end DisplayStatus

--

local sCurrentDepth

on revXMLStartTree
 DisplayStatus "revXMLStartTree"
 put "<?xml version='1.0'?>" into field
"fPrettyPrint"
 put 0 into sCurrentDepth
end revXMLStartTree

on revXMLEndTree
 DisplayStatus "revXMLEndTree"
 set the clipboardData["text"] to field
"fPrettyPrint"
 answer "Done..."
end revXMLEndTree

on revStartXMLNode pNodeName, pAttributes
 DisplayStatus "revStartXMLNode" && pNodeName
 add 1 to sCurrentDepth
 if char -1 of field "fPrettyPrint" is not return
 then put return after field "fPrettyPrint"
 repeat with i = 2 to sCurrentDepth
   put "  " after field "fPrettyPrint"
 end repeat
 put "<" & pNodeName after field "fPrettyPrint"
 repeat for each line tAttributeKVP in pAttributes
   put space & item 1 of tAttributeKVP & "=" after
field "fPrettyPrint"
   put quote & item 2 to -1 of tAttributeKVP & quote
after field "fPrettyPrint"
 end repeat
 put ">" & return after field "fPrettyPrint"
end revStartXMLNode

on revEndXMLNode pNodeName
 DisplayStatus "revEndXMLNode" && pNodeName

 then put return after field "fPrettyPrint"
 repeat with i = 2 to sCurrentDepth
   put "  " after field "fPrettyPrint"
 end repeat
 put "</" & pNodeName & ">" after field
"fPrettyPrint"
 subtract 1 from sCurrentDepth
end revEndXMLNode

on revStartXMLData pElementData
 DisplayStatus "revStartXMLData" && pElementData
 put word 1 to -1 of pElementData after field
"fPrettyPrint"
end revStartXMLData
##

Hope this helped,

Jan Schenkel.

Quartam Reports for Revolution
<http://www.quartam.com>

=====
"As we grow older, we grow both wiser and more foolish at the same time."  (La 
Rochefoucauld)



____________________________________________________________________________________
Do you Yahoo!?
Everyone is raving about the all-new Yahoo! Mail beta.
http://new.mail.yahoo.com
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to