Please pardon me.

But I am really not sure, if this implementation should belong to Xerces.

Implementation of JAXP XPath API is typically implemented by a
XSLT/XPath engine like Xalan.

Xalan-J already provides guidance for this at,
http://xml.apache.org/xalan-j/xpath_apis.html#namespacecontext.

Please ignore this proposal, if it's incorrect.

On Thu, Jan 14, 2010 at 6:47 PM, Mukul Gandhi <[email protected]> wrote:
> Hi all,
>   Currently I cannot see in Xerces-J codebase, a Xerces
> implementation of the JAXP XPath interface,
> javax.xml.namespace.NamespaceContext.
>
> It seems user's have to write their own implementation of this
> interface, when they need this functionality.
>
> I propose an implementation of this interface in Xerces-J, along the
> following lines:
>
> import javax.xml.namespace.NamespaceContext;
> import java.util.Iterator;
> import java.util.Map;
> import java.util.HashMap;
> import java.util.Set;
> import java.util.ArrayList;
> import java.util.List;
>
> public class NamespaceContextImpl implements NamespaceContext {
>     private Map namespaceStore;
>
>     public NamespaceContextImpl() {
>         namespaceStore = new HashMap();
>     }
>
>     public void setNamespace(String prefix, String namespaceURI) {
>        namespaceStore.put(prefix, namespaceURI);
>     }
>
>     public String getNamespaceURI(String prefix) {
>        return (String) namespaceStore.get(prefix);
>     }
>
>     public String getPrefix(java.lang.String namespaceURI) {
>         Set keys = namespaceStore.keySet();
>
>         for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
>            String prefix = (String) iterator.next();
>            String uri = (String) namespaceStore.get(prefix);
>            if (uri.equals(namespaceURI)) {
>               return prefix;
>            }
>         }
>
>        return null;
>     }
>
>    public Iterator getPrefixes(String namespaceURI) {
>        List prefixes = new ArrayList();
>        Set keys = namespaceStore.keySet();
>
>        for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
>           String prefix = (String) iterator.next();
>           String uri = (String) namespaceStore.get(prefix);
>           if (uri.equals(namespaceURI)) {
>               prefixes.add(prefix);
>           }
>        }
>
>       return prefixes.iterator();
>    }
>
> }
>
> An implementation like above is needed, when we have to do
> namespace-aware XPath evaluations with JAXP XPath API. for e.g,
> something like following needs to be done by the user:
>
> XPathFactory xFactory = XPathFactory.newInstance();
> XPath xPath = xFactory.newXPath();
> NamespaceContextImpl namespaceContext = new NamespaceContextImpl();
> namespaceContext.setNamespace(prefix,uri);
> xPath.setNamespaceContext(namespaceContext);
> XPathExpression xpression = xPath.compile("xpath-string using namespaces");
>
> The class, NamespaceContextImpl might be stored in Xerces-J package,
> org.apache.xerces.jaxp
>
> Any thoughts about this, please?
>
> I have an implementation for this ready with me (which is just only
> the above Java code). This could be committed to Xerces-J code-base,
> if we agree on this.



-- 
Regards,
Mukul Gandhi

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to