Women in Technology

Hear us Roar



Article:
  Parsing an XML Document with XPath
Subject:   Parsing a Namespace node with JDK 5.0
Date:   2005-02-17 07:55:52
From:   Gerg
Response to: Parsing a Namespace node with JDK 5.0

Thanks for the examples. Could you please also show an example of an xpath that includes two different namespaces prefixes? If a journal's article could be in different languages, you might want to add an "xml:lang" attribute to the "article" element. (Where the "xml" prefix in XML documents implicitly refers to the "http://www.w3.org/XML/1998/namespace" namespace without being explicitly declared as such with an "xmlns" attribute in the root element - as I understand it.) Presumably, the xpath expression to return the value of that attribute would be "/catalog/journal:journal/article/@xml:lang". In such an expression it would seem that we need to xpath.setNamespaceContext(NamespaceContextImpl) twice, with two different NamespaceContextImpl instances, one for each prefix ("journal" and "xml"). For me, though, evaluating this expression returns nothing, even if I use a NamespaceContextImpl class (or two). Hmmmmmm.
Main Topics Oldest First

Showing messages 1 through 1 of 1.

  • Parsing a Namespace node with JDK 5.0
    2005-02-17 08:01:53  Deepak Vohra | [View]

    Develop an implementation class of the NamespaceContext interface with the provision to set more than one prefixes for a uri.

    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 MyNamespaceContext implements NamespaceContext {
    private Map map;

    public MyNamespaceContext() {
    map = new HashMap();
    }

    public void setNamespace(String prefix, String namespaceURI) {
    map.put(prefix, namespaceURI);
    }

    public String getNamespaceURI(String prefix) {
    return (String) map.get(prefix);
    }

    public String getPrefix(String namespaceURI) {
    Set keys = map.keySet();
    for (Iterator iterator = keys.iterator(); iterator.hasNext();)
    {
    String prefix = (String) iterator.next();
    String uri = (String) map.get(prefix);
    if (uri.equals(namespaceURI)) return prefix;
    }
    return null;
    }

    public Iterator getPrefixes(String namespaceURI) {
    List prefixes = new ArrayList();
    Set keys = map.keySet();
    for (Iterator iterator = keys.iterator(); iterator.hasNext();)
    {
    String prefix = (String) iterator.next();
    String uri = (String) map.get(prefix);
    if (uri.equals(namespaceURI)) prefixes.add(prefix);
    }
    return prefixes.iterator();
    }
    }