peiyongz 2003/04/02 16:01:35 Modified: c/src/xercesc/dom/impl DOMProcessingInstructionImpl.hpp DOMNodeImpl.cpp DOMEntityReferenceImpl.hpp DOMEntityImpl.hpp DOMDocumentTypeImpl.hpp DOMDocumentFragmentImpl.hpp DOMCDATASectionImpl.hpp Log: Using DOM*Impl*::fNode to invoke DOMNodeImpl::getTextContent(#1,#2) Revision Changes Path 1.5 +5 -2 xml-xerces/c/src/xercesc/dom/impl/DOMProcessingInstructionImpl.hpp Index: DOMProcessingInstructionImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMProcessingInstructionImpl.hpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DOMProcessingInstructionImpl.hpp 16 Jan 2003 20:12:19 -0000 1.4 +++ DOMProcessingInstructionImpl.hpp 3 Apr 2003 00:01:34 -0000 1.5 @@ -83,8 +83,11 @@ class CDOM_EXPORT DOMProcessingInstructionImpl: public DOMProcessingInstruction { -private: +public: DOMNodeImpl fNode; + +private: + DOMChildNode fChild; // use fCharacterData to store its data so that those character utitlites can be used DOMCharacterDataImpl fCharacterData; 1.23 +159 -57 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.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- DOMNodeImpl.cpp 2 Apr 2003 22:30:01 -0000 1.22 +++ DOMNodeImpl.cpp 3 Apr 2003 00:01:34 -0000 1.23 @@ -68,6 +68,13 @@ #include "DOMAttrImpl.hpp" #include "DOMCasts.hpp" #include "DOMDocumentImpl.hpp" +#include "DOMCDATASectionImpl.hpp" +#include "DOMEntityReferenceImpl.hpp" +#include "DOMEntityImpl.hpp" +#include "DOMProcessingInstructionImpl.hpp" +#include "DOMCommentImpl.hpp" +#include "DOMDocumentFragmentImpl.hpp" +#include "DOMNotationImpl.hpp" #include <xercesc/dom/DOMImplementation.hpp> #include <xercesc/dom/DOMException.hpp> @@ -908,42 +915,135 @@ return pattern; } -const XMLCh* DOMNodeImpl::getTextContent(XMLCh* pzBuffer, unsigned int& -rnBufferLength) const +/*** + * + * Excerpt from http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/core.html#Node3-textContent + * + * textContent of type DOMString, introduced in DOM Level 3 + * + * This attribute returns the text content of this node and its descendants. When it is defined + * to be null, setting it has no effect. + * + * When set, any possible children this node may have are removed and replaced by a single Text node + * containing the string this attribute is set to. + * + * On getting, no serialization is performed, the returned string does not contain any markup. + * No whitespace normalization is performed, the returned string does not contain the element content + * whitespaces Fundamental Interfaces. + * + * Similarly, on setting, no parsing is performed either, the input string is taken as pure textual content. + * + * The string returned is made of the text content of this node depending on its type, + * as defined below: + * + * Node type Content + * ==================== ======================================================================== + * ELEMENT_NODE concatenation of the textContent attribute value of every child node, + * ENTITY_NODE excluding COMMENT_NODE and PROCESSING_INSTRUCTION_NODE nodes. + * ENTITY_REFERENCE_NODE This is the empty string if the node has no children. + * DOCUMENT_FRAGMENT_NODE + * -------------------------------------------------------------------------------------------------- + * ATTRIBUTE_NODE + * TEXT_NODE + * CDATA_SECTION_NODE + * COMMENT_NODE, + * PROCESSING_INSTRUCTION_NODE nodeValue + * -------------------------------------------------------------------------------------------------- + * DOCUMENT_NODE, + * DOCUMENT_TYPE_NODE, + * NOTATION_NODE null + * + ***/ + +const XMLCh* DOMNodeImpl::getTextContent() const { - unsigned int nRemainingBuffer = rnBufferLength; - rnBufferLength = 0; - if (pzBuffer) - *pzBuffer = 0; - - DOMNode *thisNode = castToNode(this); - switch (thisNode->getNodeType()) { - case DOMNode::ELEMENT_NODE: + + unsigned int nBufferLength = 0; + + getTextContent(NULL, nBufferLength); + XMLCh* pzBuffer = (XMLCh*)((DOMDocumentImpl*)getOwnerDocument())->allocate(nBufferLength+1); + + getTextContent(pzBuffer, nBufferLength); + pzBuffer[nBufferLength] = 0; + + return pzBuffer; + +} + +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(); - } + DOMNode* current = thisNode->getFirstChild(); + DOMNodeImpl* nodeImpl; + + while (current != NULL) + { + if (current->getNodeType() != DOMNode::COMMENT_NODE && + current->getNodeType() != DOMNode::PROCESSING_INSTRUCTION_NODE) + { + switch (current->getNodeType()) + { + case DOMNode::ELEMENT_NODE: + nodeImpl = &(((DOMElementImpl*)current)->fNode); + case DOMNode::ATTRIBUTE_NODE: + nodeImpl = &(((DOMAttrImpl*)current)->fNode); + case DOMNode::TEXT_NODE: + nodeImpl = &(((DOMTextImpl*)current)->fNode); + case DOMNode::CDATA_SECTION_NODE: + nodeImpl = &(((DOMCDATASectionImpl*)current)->fNode); + case DOMNode::ENTITY_REFERENCE_NODE: + nodeImpl = &(((DOMEntityReferenceImpl*)current)->fNode); + case DOMNode::ENTITY_NODE: + nodeImpl = &(((DOMEntityImpl*)current)->fNode); + case DOMNode::PROCESSING_INSTRUCTION_NODE: + nodeImpl = &(((DOMProcessingInstructionImpl*)current)->fNode); + case DOMNode::COMMENT_NODE: + nodeImpl = &(((DOMCommentImpl*)current)->fNode); + case DOMNode::DOCUMENT_NODE: + nodeImpl = &(((DOMDocumentImpl*)current)->fNode); + case DOMNode::DOCUMENT_TYPE_NODE: + nodeImpl = &(((DOMDocumentTypeImpl*)current)->fNode); + case DOMNode::DOCUMENT_FRAGMENT_NODE: + nodeImpl = &(((DOMDocumentFragmentImpl*)current)->fNode); + case DOMNode::NOTATION_NODE: + nodeImpl = &(((DOMNotationImpl*)current)->fNode); + } + + if (pzBuffer) + { + unsigned int nContentLength = nRemainingBuffer; + nodeImpl->getTextContent(pzBuffer + rnBufferLength, nContentLength); + rnBufferLength += nContentLength; + nRemainingBuffer -= nContentLength; + } + else + { + unsigned int nContentLength = 0; + nodeImpl->getTextContent(NULL, nContentLength); + rnBufferLength += nContentLength; + } + } + + current = current->getNextSibling(); + + } } + break; case DOMNode::ATTRIBUTE_NODE: @@ -952,38 +1052,40 @@ 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; - } + 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; -} + /*** + DOCUMENT_NODE + DOCUMENT_TYPE_NODE + NOTATION_NODE + ***/ + default: + break; + } + + return pzBuffer; + +} -void DOMNodeImpl::setTextContent(const XMLCh* textContent){ +void DOMNodeImpl::setTextContent(const XMLCh* textContent){ throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0); } 1.4 +5 -2 xml-xerces/c/src/xercesc/dom/impl/DOMEntityReferenceImpl.hpp Index: DOMEntityReferenceImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMEntityReferenceImpl.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- DOMEntityReferenceImpl.hpp 4 Nov 2002 15:07:34 -0000 1.3 +++ DOMEntityReferenceImpl.hpp 3 Apr 2003 00:01:34 -0000 1.4 @@ -82,8 +82,11 @@ class CDOM_EXPORT DOMEntityReferenceImpl: public DOMEntityReference { -private: +public: DOMNodeImpl fNode; + +private: + DOMParentNode fParent; DOMChildNode fChild; 1.6 +4 -2 xml-xerces/c/src/xercesc/dom/impl/DOMEntityImpl.hpp Index: DOMEntityImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMEntityImpl.hpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DOMEntityImpl.hpp 4 Nov 2002 15:07:34 -0000 1.5 +++ DOMEntityImpl.hpp 3 Apr 2003 00:01:34 -0000 1.6 @@ -81,8 +81,10 @@ class DOMEntityReference; class CDOM_EXPORT DOMEntityImpl: public DOMEntity { -private: +public: DOMNodeImpl fNode; +private: + DOMParentNode fParent; const XMLCh * fName; 1.10 +5 -2 xml-xerces/c/src/xercesc/dom/impl/DOMDocumentTypeImpl.hpp Index: DOMDocumentTypeImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMDocumentTypeImpl.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DOMDocumentTypeImpl.hpp 4 Nov 2002 15:07:34 -0000 1.9 +++ DOMDocumentTypeImpl.hpp 3 Apr 2003 00:01:34 -0000 1.10 @@ -84,8 +84,11 @@ class NamedNodeMapImpl; class CDOM_EXPORT DOMDocumentTypeImpl: public DOMDocumentType { -private: +public: DOMNodeImpl fNode; + +private: + DOMParentNode fParent; DOMChildNode fChild; 1.3 +4 -2 xml-xerces/c/src/xercesc/dom/impl/DOMDocumentFragmentImpl.hpp Index: DOMDocumentFragmentImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMDocumentFragmentImpl.hpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- DOMDocumentFragmentImpl.hpp 4 Nov 2002 15:07:34 -0000 1.2 +++ DOMDocumentFragmentImpl.hpp 3 Apr 2003 00:01:35 -0000 1.3 @@ -78,8 +78,10 @@ class CDOM_EXPORT DOMDocumentFragmentImpl: public DOMDocumentFragment { -private: +public: DOMNodeImpl fNode; +private: + DOMParentNode fParent; 1.5 +4 -2 xml-xerces/c/src/xercesc/dom/impl/DOMCDATASectionImpl.hpp Index: DOMCDATASectionImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMCDATASectionImpl.hpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DOMCDATASectionImpl.hpp 4 Nov 2002 15:07:34 -0000 1.4 +++ DOMCDATASectionImpl.hpp 3 Apr 2003 00:01:35 -0000 1.5 @@ -81,8 +81,10 @@ class CDOM_EXPORT DOMCDATASectionImpl: public DOMCDATASection { -private: +public: DOMNodeImpl fNode; +private: + DOMParentNode fParent; DOMChildNode fChild; DOMCharacterDataImpl fCharacterData;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]