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]