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]