[Rd] Creating XML document extremely slow

Milan Bouchet-Valat nalimilan at club.fr
Fri Feb 10 14:10:19 CET 2012


Le vendredi 10 février 2012 à 13:18 +0100, Titus von der Malsburg a
écrit :
> Hi list,
> 
> I'm using the package XML to create a simple XML document.
> Unfortunately constructing the XML tree is extremely slow.  My code
> (see below) adds only about 100 nodes per second on an Intel i5
> machine.  There's clearly something wrong but I don't see what.
> 
> Here's a sample of the XML document:
> 
>   <?xml version="1.0" encoding="utf-8"?>
>   <MarkerSet xmlns="http://www.brainproducts.com/MarkerSet">
>    <SamplingRate>512.032770097286</SamplingRate>
>    <SamplingInterval>1.953</SamplingInterval>
>    <Markers>
>     <Marker>
>      <Type>Stimulus</Type>
>      <Description>prr_156</Description>
>      <Position>397497</Position>
>      <Points>1</Points>
>      <Channel>All</Channel>
>     </Marker>
>     ...
>    </Markers>
>   </MarkerSet>
> 
> There are about 500 very similar marker tags.  Here's the part of the
> code that is particularly slow (x is a character, y is an integer,
> both have a length of about 500):
> 
>   markernode <- xmlNode('Markers')
>   for(i in 1:length(t)){
>     markernode <- addChildren(markernode, xmlNode('Marker',
>              xmlNode('Type', 'Stimulus'), xmlNode('Description', x[i]),
>              xmlNode('Position', y[i]), xmlNode('Points', 1),
>              xmlNode('Channel', 'All')))
>   }
> 
> Looks pretty harmless to me.  Any suggestion about how I can speed
> this up are most welcome!
Just a guess, but I'd try creating all 'Marker' nodes first, storing
them in a 'markers' list, and then calling addChildren(markernode,
kids=markers). Adding nodes one by one is likely to create useless
overhead.

Hope this helps



More information about the R-devel mailing list