tng 2002/08/19 12:55:28 Modified: c/src/xercesc/dom/impl DOMNodeImpl.cpp Log: DOM L3: support DOMNode::isDefaultNamespace. Added by Gareth Reakes. Revision Changes Path 1.13 +58 -5 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- DOMNodeImpl.cpp 16 Aug 2002 19:21:43 -0000 1.12 +++ DOMNodeImpl.cpp 19 Aug 2002 19:55:28 -0000 1.13 @@ -77,7 +77,6 @@ #include <xercesc/util/PlatformUtils.hpp> #include <stdio.h> #include <assert.h> - const unsigned short DOMNodeImpl::READONLY = 0x1<<0; const unsigned short DOMNodeImpl::SYNCDATA = 0x1<<1; const unsigned short DOMNodeImpl::SYNCCHILDREN = 0x1<<2; @@ -912,9 +911,63 @@ throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0); } -bool DOMNodeImpl::isDefaultNamespace(const XMLCh* namespaceURI) const { - throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0); - return false; + +bool DOMNodeImpl::isDefaultNamespace(const XMLCh* namespaceURI) const{ + DOMNode *thisNode = castToNode(this); + short type = thisNode->getNodeType(); + switch (type) { + case DOMNode::ELEMENT_NODE: { + //if we dont find a xmlns and we are looking for "" then its true + if(thisNode->isSameNode(thisNode->getOwnerDocument()->getDocumentElement())) { + if(namespaceURI == 0) { + return true; + } + } + + const XMLCh *ns = getNamespaceURI(); + const XMLCh *prefix = getPrefix(); + + if (thisNode->hasAttributes()) { + DOMElement *elem = (DOMElement *)thisNode; + DOMNode *attr = elem->getAttributeNodeNS(s_xmlnsURI, s_xmlns); + if (attr != 0) { + const XMLCh *value = attr->getNodeValue(); + return (XMLString::compareString(namespaceURI, value) == 0); + } + } + DOMNode *ancestor = getElementAncestor(thisNode); + if (ancestor != 0) { + return ancestor->isDefaultNamespace(namespaceURI); + } + + return false; + } + case DOMNode::DOCUMENT_NODE:{ + return ((DOMDocument*)thisNode)->getDocumentElement()->isDefaultNamespace(namespaceURI); + } + + case DOMNode::ENTITY_NODE : + case DOMNode::NOTATION_NODE: + case DOMNode::DOCUMENT_FRAGMENT_NODE: + case DOMNode::DOCUMENT_TYPE_NODE: + // type is unknown + return false; + case DOMNode::ATTRIBUTE_NODE:{ + if (fOwnerNode->getNodeType() == DOMNode::ELEMENT_NODE) { + return fOwnerNode->isDefaultNamespace(namespaceURI); + + } + return false; + } + default:{ + DOMNode *ancestor = getElementAncestor(thisNode); + if (ancestor != 0) { + return ancestor->isDefaultNamespace(namespaceURI); + } + return false; + } + + } } DOMNode* DOMNodeImpl::getInterface(const XMLCh* feature) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]