Jason, et al,
Trying to implement the solution you list -- but I need to take input from
a local variable. My previous attempt used a XercesDOMParser rather than
DOMBuilder... and XercesDOMParser::parse was AbstractDOMParser::parse,
which took an InputSource (can be StdIn*, MemBuf*, LocalFile*, ...).
DOMBuilder::parse rather takes a DOMInputSource, which seems that it may
only be a file or URL natively.
There is a handy class called Wrapper4InputSource which isa DOMInputSource
which can allow an InputSource to be used as a DOMInputSource. However...
Wrapper4InputSource doesn't appear to be available in XML::Xerces. I
didn't see any tests with a DOMInputSource used, either... Have I missed
something, or...?
-brian
"Jason E. Stewart" wrote:
>
> Chris Cheung <[EMAIL PROTECTED]> writes:
>
> > I need to use Xerces-Perl to repeatedly
> >
> > - parse XML to DOM tree
> > - manipulate the DOM tree
> > - pretty-print the DOM tree
> >
> > It seems that serious memory leak occurs. I do not hold any reference to
> > the Perl Xerces object used in the programme and hence the Perl objects
> > should be DESTROYed after use, but memory usage keeps on increasing as
> > reported by the OS.
>
> Hi Chris,
>
> So I think I've solved this. First use DOMBuilder, and second ensure
> that resetDocumentPool() gets called after you are finished with the
> DOM tree. Here's some code stolen from my memtest.pl:
>
> my $impl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS');
> my $parser =
> $impl->createDOMBuilder($XML::Xerces::DOMImplementationLS::MODE_SYNCHRONOUS,'');
>
> sub validate_builder {
> my $xml = shift ;
> my $parser = shift;
>
> eval {
> $parser->setFeature("$XML::Xerces::XMLUni::fgDOMNamespaces", $namespace) ;
> $parser->setFeature("$XML::Xerces::XMLUni::fgXercesSchema", $schema) ;
> $parser->setFeature("$XML::Xerces::XMLUni::fgXercesSchemaFullChecking", $schema)
> ;
> # $parser->setFeature("http://apache.org/xml/features/validation-error-as-fatal",
> $validate) ;
> };
> XML::Xerces::error($@) if $@;
>
> eval {
> $parser->setFeature("$XML::Xerces::XMLUni::fgDOMValidation", $validate) ;
> # $parser->setFeature("$XML::Xerces::XMLUni::fgDOMValidateIfSchema", 0) ;
> };
> XML::Xerces::error($@) if $@;
>
> eval {
> # my $is = XML::Xerces::MemBufInputSource->new($xml);
> # my $is = XML::Xerces::LocalFileInputSource->new($OPTIONS{file});
> $parser->parseURI($OPTIONS{file}) ;
> } ;
> XML::Xerces::error($@) if $@;
> $parser->resetDocumentPool();
> }
>
> Using this code I'm not getting any perceptable leaks with 2.3.0-4.
>
> Let me know if this helps,
> jas.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
--
Brian Faull
Senior Integrated Electronics Engineer
D620 - Communications and Networking
The MITRE Corporation
202 Burlington Road, MS E015
Bedford, MA 01730-1420
V:781.271.5736 F:781.271.8875
mailto:[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]