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 08:01:53
From:   dvohra09
Response to: Parsing a Namespace node with JDK 5.0

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();
}
}


Full Threads Oldest First

Showing messages 1 through 2 of 2.

  • Parsing a Namespace node with JDK 5.0
    2005-02-18 02:16:18  Gerg [View]

    Thanks, that works like a charm!
    • Parsing a Namespace node with JDK 5.0
      2006-02-22 09:15:26  Gerg [View]

      I'm getting an unexplanatory XPathExpressionException when I evaluate the following xpath

      /xhtml:html/xhtml:body//xhtml:div[@class='reviewlist']

      after setting a namespace context

      NamespaceContextImpl nsctx = new NamespaceContextImpl();
      nsctx.setNamespaceURI("xml", "http://www.w3.org/XML/1998/namespace");
      nsctx.setNamespaceURI("xhtml", "http://www.w3.org/1999/xhtml");
      xpath.setNamespaceContext(nsctx);

      The source XML document is an XHTML web page with its root element being declared as belonging to http://www.w3.org/1999/xhtml namespace:

      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">

      I can't see anything wrong with the xpath expression, nor can I find any documentation explaining why an XPathExpressionException would be thrown in this case.

      Could you tell any possisble causes for the exception being thrown?

      Thanks.