Author: borisk
Date: Thu Jun 19 01:26:54 2008
New Revision: 669424

URL: http://svn.apache.org/viewvc?rev=669424&view=rev
Log:
Support for resolving default namespace. Support for removing namespace-prefix 
bindings. Additional documentation.

Modified:
    xerces/c/trunk/src/xercesc/dom/DOMXPathNSResolver.hpp
    xerces/c/trunk/src/xercesc/dom/impl/DOMXPathNSResolverImpl.cpp

Modified: xerces/c/trunk/src/xercesc/dom/DOMXPathNSResolver.hpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/DOMXPathNSResolver.hpp?rev=669424&r1=669423&r2=669424&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/DOMXPathNSResolver.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/DOMXPathNSResolver.hpp Thu Jun 19 01:26:54 
2008
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,8 +27,8 @@
 XERCES_CPP_NAMESPACE_BEGIN
 /**
  * The <code>DOMXPathNSResolver</code> interface permit prefix strings
- * in the expression to be properly bound to namespaceURI strings. 
- * <code>DOMXPathEvaluator</code> can construct an implementation of 
+ * in the expression to be properly bound to namespaceURI strings.
+ * <code>DOMXPathEvaluator</code> can construct an implementation of
  * <code>DOMXPathNSResolver</code> from a node, or the interface may be
  * implemented by any application.
  * @since DOM Level 3
@@ -41,7 +41,7 @@
     //  Hidden constructors
     // -----------------------------------------------------------------------
     /** @name Hidden constructors */
-    //@{    
+    //@{
     DOMXPathNSResolver() {};
     //@}
 
@@ -74,10 +74,10 @@
     /** @name Functions introduced in DOM Level 3 */
     //@{
 
-    /** Look up the namespace URI associated to the given namespace prefix. 
-     * The XPath evaluator must never call this with a null or empty argument, 
-     * because the result of doing this is undefined.
-     * @param prefix of type XMLCh - The prefix to look for.
+    /** Look up the namespace URI associated to the given namespace prefix.
+     *
+     * @param prefix of type XMLCh - The prefix to look for. An empty or
+     * null string denotes the default namespace.
      * @return the associated namespace URI or null if none is found.
      */
     virtual const XMLCh*          lookupNamespaceURI(const XMLCh* prefix) 
const = 0;
@@ -96,7 +96,8 @@
      * XPath2 implementations require a reverse lookup in the static context.
      * Look up the prefix associated with the namespace URI
      * @param URI of type XMLCh - The namespace to look for.
-     * @return the associated prefix or null if none is found.
+     * @return the associated prefix which can be an empty string if this
+     * is a default namespace or null if none is found.
      */
     virtual const XMLCh*          lookupPrefix(const XMLCh* URI) const = 0;
 
@@ -104,8 +105,11 @@
      * Non-standard extension
      *
      * Associate the given namespace prefix to the namespace URI.
-     * @param prefix of type XMLCh - The namespace prefix to bind.
-     * @param URI of type XMLCh - The associated namespace URI.
+     * @param prefix of type XMLCh - The namespace prefix to bind. An empty
+     * or null string denotes the default namespace.
+     * @param URI of type XMLCh - The associated namespace URI. If this
+     * argument is null or an empty string then the existing binding for this
+     * prefix is removed.
      */
     virtual void addNamespaceBinding(const XMLCh* prefix, const XMLCh* uri) = 
0;
 
@@ -124,5 +128,3 @@
 XERCES_CPP_NAMESPACE_END
 
 #endif
-
-

Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMXPathNSResolverImpl.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/impl/DOMXPathNSResolverImpl.cpp?rev=669424&r1=669423&r2=669424&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMXPathNSResolverImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMXPathNSResolverImpl.cpp Thu Jun 19 
01:26:54 2008
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -38,23 +38,34 @@
 
 const XMLCh* DOMXPathNSResolverImpl::lookupNamespaceURI(const XMLCh* prefix) 
const
 {
+    if(prefix == 0) prefix = XMLUni::fgZeroLenString;
+
     if(XMLString::equals(prefix, XMLUni::fgXMLString))
         return XMLUni::fgXMLURIName;
 
     const KVStringPair *pair = fNamespaceBindings->get((void*)prefix);
     if(pair) {
+
+        // An empty namespace URI indicated that this binding was removed
+        // by the user.
+        //
         if(*pair->getValue() == 0) return NULL;
+
         return pair->getValue();
     }
 
     if(fResolverNode)
-        return fResolverNode->lookupNamespaceURI(prefix);
+        return fResolverNode->lookupNamespaceURI(
+          *prefix == 0 ? 0 : prefix); // Expects 0 for default namespace.
 
     return NULL;
 }
 
 const XMLCh* DOMXPathNSResolverImpl::lookupPrefix(const XMLCh* uri) const
 {
+    if (uri == 0 || *uri == 0)
+        return 0;
+
     if(XMLString::equals(uri, XMLUni::fgXMLURIName))
         return XMLUni::fgXMLString;
 
@@ -67,9 +78,16 @@
     }
 
     if(fResolverNode)
-        return fResolverNode->lookupPrefix(uri);
+    {
+      const XMLCh* r = fResolverNode->lookupPrefix(uri);
 
-    return NULL;
+      if (r == 0 && fResolverNode->isDefaultNamespace(uri))
+        r = XMLUni::fgZeroLenString;
+
+      return r;
+    }
+
+    return 0;
 }
 
 void DOMXPathNSResolverImpl::addNamespaceBinding(const XMLCh* prefix, const 
XMLCh* uri)



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to