Alberto, I agree, but the fact is that it does affect my other document. This is why I think it's a bug. In the debugger I can see that the doc released by loadGrammar has the same address as my doc from previous parse of a xml file.
-----Original Message----- From: Alberto Massari [mailto:[EMAIL PROTECTED] Sent: Monday, August 21, 2006 10:49 PM To: [email protected] Subject: RE: why does DOMBuilderImpl::loadGrammar releases my DOMDocument? Hi Ori, from what I remember, the loadGrammar API will release the DOM tree that represents the XMLSchema passed as argument to loadGrammar; your previously loaded documents should not be affected. Alberto At 23.21 21/08/2006 +0200, Ori Doolman wrote: >Hello, >Any news about that? >The only thing I can think of for solving this is to allocate another >DOMBuilder parser, and use it for schema purposes only. I think that >separating the schema grammar parsing (loadGrammar) from my XML parsing >is a reasonable workaround. >Also, I think it should be reported as a bug. >What do you think? > > >-----Original Message----- >From: Ori Doolman >Sent: Monday, August 21, 2006 2:54 PM >To: [email protected] >Subject: RE: why does DOMBuilderImpl::loadGrammar releases my >DOMDocument? > >Axel, >I tried calling adoptDocument myself before loadGrammar, and it still >doesn't help. >I don't understand why loadGrammar should release any document at all >(and my parsed XML doc in particular). > > >-----Original Message----- >From: Axel Wei? [mailto:[EMAIL PROTECTED] >Sent: Monday, August 21, 2006 9:39 AM >To: [email protected] >Subject: Re: why does DOMBuilderImpl::loadGrammar releases my >DOMDocument? > >Ori Doolman wrote: > > Hello, > > > > I'm parsing xml files using Xerces-c 2.7 DOM. > > > > I do the following things (more or less): > > > > > > > > 1. create a XMLGrammarPoolImpl object and then create a new > > DOMBuilder using it as an input. > > 2. parse an xml file using the DOMBuilder and keep a reference to > > the DOMDocument, 'doc1' > > 3. parse another XML file using the same DOMBuilder and keep a > > reference to the DOMDocument 'doc2' > > 4. Create a new DOMInputSource and call DOMBuilder > > ->loadGrammar(inputSrc, SchemaGrammarType, true) > > > > > > > > The result is that my previous parsed document, 'doc2' is being >released > > by the following code in parsers\DOMBuilderImpl.cpp on > > DOMBuilderImpl::loadGrammar (line 703): > > > > > > > > // Release DOM tree - DTD > > > > DOMDocument* doc = adoptDocument(); > > > > if (doc) > > > > doc->release(); > > > > > > > > > > > > Can someone explain why my document is being release and how to >overcome > > that? Is it a bug? > >Ori, > >AFAIK you can call adoptDocument() yourself and release the doc after >use. > >HTH, > Axel
