Hi, all, I gonna check in Erik's code (thanks Erik), and draft an FAQ on the method(s) to clarify the ownership issue of the returned text.
Rgds, PeiYong ----- Original Message ----- From: "Erik Rydgren" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, April 02, 2003 4:40 AM Subject: RE: Implementing getTextContent > No keep the DOM API as it is. The DOMNode function has not changed. But now > the new function is available in DOMNodeImpl for those with special memory > management needs. > > / Erik > > > -----Original Message----- > From: Gareth Reakes [mailto:[EMAIL PROTECTED] > Sent: den 2 april 2003 11:14 > To: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: RE: Implementing getTextContent > > > Hi, > are you suggesting we should extend the DOM with a proprietary > method? In this case I'm not completely against it considering that the > DOM specs pay no attention to memory management. Another alternative would > be to put the method in the impl file and cast down to it. > > Gareth > > > > On Wed, 2 Apr 2003, Erik Rydgren wrote: > > > I agree that this is a good way of providing both functionalities and it > > actually made implementation a bit easier. > > I took the liberty to write the whole shabang down in code. > > This is written direcly from the specifications now. > > As always the code compiles but it is untested. Please verify. > > > > Regards > > > > Erik Rydgren > > Mandarinen systems AB > > Sweden > > > > --- CODE --- > > > > const XMLCh* DOMNodeImpl::getTextContent(XMLCh* pzBuffer, unsigned > int& > > rnBufferLength) const > > { > > unsigned int nRemainingBuffer = rnBufferLength; > > rnBufferLength = 0; > > if (pzBuffer) > > *pzBuffer = 0; > > > > DOMNode *thisNode = castToNode(this); > > switch (thisNode->getNodeType()) { > > case DOMNode::ELEMENT_NODE: > > case DOMNode::ENTITY_NODE: > > case DOMNode::ENTITY_REFERENCE_NODE: > > case DOMNode::DOCUMENT_FRAGMENT_NODE: > > { > > DOMNode* current = thisNode->getFirstChild(); > > while (current != NULL) { > > if (current->getNodeType() != DOMNode::COMMENT_NODE && > > current->getNodeType() != > DOMNode::PROCESSING_INSTRUCTION_NODE) > > { > > if (pzBuffer) { > > unsigned int nContentLength = nRemainingBuffer; > > ((DOMNodeImpl*)current)->getTextContent(pzBuffer + > > rnBufferLength, nContentLength); > > rnBufferLength += nContentLength; > > nRemainingBuffer -= nContentLength; > > } > > else { > > unsigned int nContentLength = 0; > > ((DOMNodeImpl*)current)->getTextContent(NULL, nContentLength); > > rnBufferLength += nContentLength; > > } > > } > > current = current->getNextSibling(); > > } > > } > > break; > > > > case DOMNode::ATTRIBUTE_NODE: > > case DOMNode::TEXT_NODE: > > case DOMNode::CDATA_SECTION_NODE: > > case DOMNode::COMMENT_NODE: > > case DOMNode::PROCESSING_INSTRUCTION_NODE: > > { > > const XMLCh* pzValue = thisNode->getNodeValue(); > > unsigned int nStrLen = XMLString::stringLen(pzValue); > > if (pzBuffer) { > > unsigned int nContentLength = (nRemainingBuffer >= nStrLen) ? > > nStrLen : nRemainingBuffer; > > XMLString::copyNString(pzBuffer + rnBufferLength, pzValue, > > nContentLength); > > rnBufferLength += nContentLength; > > nRemainingBuffer -= nContentLength; > > } > > else { > > rnBufferLength += nStrLen; > > } > > } > > break; > > } > > return pzBuffer; > > } > > > > const XMLCh* DOMNodeImpl::getTextContent() const > > { > > unsigned int nBufferLength = 0; > > getTextContent(NULL, nBufferLength); > > XMLCh* pzBuffer = (XMLCh*) > > ((DOMDocumentImpl*)getOwnerDocument())->allocate(nBufferLength+1); > > getTextContent(pzBuffer, nBufferLength); > > pzBuffer[nBufferLength] = 0; > > return pzBuffer; > > } > > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > Sent: den 2 april 2003 02:52 > > To: [EMAIL PROTECTED] > > Subject: RE: Implementing getTextContent > > > > > > > > > > > > > > Hi all, > > > > What about another overload which allows for a user-supplied buffer for > the > > text, along with an argument which specifies the maximum numbers of > > characters to copy, returning the number of characters actually copied? > > That, along with an implementation that would allow passing in a null > > pointer for the buffer to indicate the call should just determine how > large > > a buffer needs to be would be the most efficient way to go. Then, the > > other original API can be implemented using the new one. > > > > Just my 2 cents worth... > > > > Dave > > > > > > > > |---------+---------------------------> > > | | "Neil Graham" | > > | | <[EMAIL PROTECTED]| > > | | m> | > > | | | > > | | 04/01/2003 02:52| > > | | PM | > > | | Please respond | > > | | to xerces-c-dev | > > |---------+---------------------------> > > > > > >--------------------------------------------------------------------------- > > -----------------------------------------------------| > > | > > | > > | To: [EMAIL PROTECTED] > > | > > | cc: (bcc: David N Bertoni/Cambridge/IBM) > > | > > | Subject: RE: Implementing getTextContent > > | > > > > > >--------------------------------------------------------------------------- > > -----------------------------------------------------| > > > > > > > > Hi Erik and Gareth, > > > > FWIW, I'm fairly strongly of the view that we need to preserve consistency > > here so that the parser owns this memory. It's always bad to be > > inconsistent but isn't it especially bad with things as subtle as memory > > management? > > > > Besides, the memory here is no larger than the sum of all the textual > > children of the node; when you think about how heavy the DOM tends to be, > > so long as this is documented in a FAQ somewhere I think this should be > > acceptable. After all, if a user just wants text then surely she should > be > > using SAX; otherwise there's generally likely lots of other operations > > being performed (i.e., getTextContent shouldn't be used that often). > > > > Cheers, > > Neil > > Neil Graham > > XML Parser Development > > IBM Toronto Lab > > Phone: 905-413-3519, T/L 969-3519 > > E-mail: [EMAIL PROTECTED] > > > > > > > > > > |---------+----------------------------> > > | | "Erik Rydgren" | > > | | <[EMAIL PROTECTED]| > > | | darinen.se> | > > | | | > > | | 04/01/2003 05:01 | > > | | AM | > > | | Please respond to| > > | | xerces-c-dev | > > | | | > > |---------+----------------------------> > > > > > >--------------------------------------------------------------------------- > > ------------------------------------------------------------------| > > > > | > > | > > | To: <[EMAIL PROTECTED]> > > | > > | cc: > > | > > | Subject: RE: Implementing getTextContent > > | > > | > > | > > | > > | > > > > > >--------------------------------------------------------------------------- > > ------------------------------------------------------------------| > > > > > > > > > > I agree, I like consistency. > > Let's register the string into the document by allocating the memory on > the > > documents heap. > > Although, the result can be very large. Should we allow the user to > release > > the memory when not used anymore? How? > > > > / Erik > > > > -----Original Message----- > > From: Gareth Reakes [mailto:[EMAIL PROTECTED] > > Sent: den 1 april 2003 11:55 > > To: [EMAIL PROTECTED] > > Subject: RE: Implementing getTextContent > > > > > > Hi, > > there are no other methods in the DOM interface that you have > > to > > do that with. My opinion is that we allow the document to manage this as > > well for consistency. Anyone else got an opinion? > > > > Gareth > > > > > > -- > > Gareth Reakes, Head of Product Development +44-1865-203192 > > DecisionSoft Limited http://www.decisionsoft.com > > XML Development and Services > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > -- > Gareth Reakes, Head of Product Development +44-1865-203192 > DecisionSoft Limited http://www.decisionsoft.com > XML Development and Services > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]