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]

Reply via email to