peiyongz 2003/04/02 14:30:01 Modified: c/src/xercesc/dom/impl DOMNodeImpl.hpp DOMNodeImpl.cpp Log: Patch from Erik Rydgren <[EMAIL PROTECTED]>, implementation of getTextContent(). Revision Changes Path 1.12 +3 -1 xml-xerces/c/src/xercesc/dom/impl/DOMNodeImpl.hpp Index: DOMNodeImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMNodeImpl.hpp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- DOMNodeImpl.hpp 4 Nov 2002 15:07:34 -0000 1.11 +++ DOMNodeImpl.hpp 2 Apr 2003 22:30:01 -0000 1.12 @@ -160,6 +160,7 @@ const XMLCh* getBaseURI() const ; short compareTreePosition(const DOMNode* other) const; const XMLCh* getTextContent() const ; + const XMLCh* getTextContent(XMLCh* pzBuffer, unsigned int& rnBufferLength) const; void setTextContent(const XMLCh* textContent) ; const XMLCh* lookupNamespacePrefix(const XMLCh* namespaceURI, bool useDefault) const ; bool isDefaultNamespace(const XMLCh* namespaceURI) const ; @@ -356,6 +357,7 @@ virtual const XMLCh* getBaseURI() const ;\ virtual short compareTreePosition(const DOMNode* other) const ;\ virtual const XMLCh* getTextContent() const ;\ + const XMLCh* getTextContent(XMLCh* pzBuffer, unsigned int& rnBufferLength) const;\ virtual void setTextContent(const XMLCh* textContent) ;\ virtual const XMLCh* lookupNamespacePrefix(const XMLCh* namespaceURI, bool useDefault) const ;\ virtual bool isDefaultNamespace(const XMLCh* namespaceURI) const;\ 1.22 +74 -4 xml-xerces/c/src/xercesc/dom/impl/DOMNodeImpl.cpp Index: DOMNodeImpl.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMNodeImpl.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- DOMNodeImpl.cpp 16 Jan 2003 18:56:49 -0000 1.21 +++ DOMNodeImpl.cpp 2 Apr 2003 22:30:01 -0000 1.22 @@ -908,10 +908,80 @@ return pattern; } +const XMLCh* DOMNodeImpl::getTextContent(XMLCh* pzBuffer, unsigned int& +rnBufferLength) const +{ + unsigned int nRemainingBuffer = rnBufferLength; + rnBufferLength = 0; + if (pzBuffer) + *pzBuffer = 0; -const XMLCh* DOMNodeImpl::getTextContent() const{ - return 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; } + void DOMNodeImpl::setTextContent(const XMLCh* textContent){ throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]