You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Darryl Fenwick <fe...@streamsim.com> on 2007/10/12 19:24:12 UTC

[JXPath] jxpath and namespaces

Hi All,

I'd like to use JXPath to access elements in an xml file with the 
following sample contents in a file called test.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore xmlns="http://www.streamsim.com/ns/2007/bookstore">
<book>
   <title lang="eng">Harry Potter</title>
   <price>29.99</price>
</book>
<book>
   <title lang="eng">Learning XML</title>
   <price>39.95</price>
</book>
</bookstore>

I have the following Java method using JXPath to read the xml file:

static public void testJXPath() throws MalformedURLException {
         File testXml = new File("C:/TEMP/test.xml");
         String xPath = "bookstore/book[0]/title";
         URI uri = testXml.toURI();
         JXPathContext context = JXPathContext.newContext(new 
DocumentContainer(uri.toURL(), DocumentContainer.MODEL_JDOM));
         context.registerNamespace("", 
"http://www.streamsim.com/ns/2007/bookstore");
         System.out.println(context.selectSingleNode(xPath).getClass().toString());
         System.out.println(context.selectSingleNode(xPath).toString());
         System.out.println(context.getValue(xPath).getClass().toString());
         System.out.println(context.getValue(xPath).toString());
}

This causes an exception:

No pointer for xpath: bookstore/book[0]/title
org.apache.commons.jxpath.JXPathException: No pointer for xpath: 
bookstore/book[0]/title
         at 
org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getPointer(JXPathContextReferenceImpl.java:402)
         at 
org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getPointer(JXPathContextReferenceImpl.java:392)
         at 
org.apache.commons.jxpath.JXPathContext.selectSingleNode(JXPathContext.java:639)


However, when I remove the namespace from the xml file, the method 
runs fine with the following output.

------------- Standard Output ---------------
class org.jdom.Element
[Element: <title/>]
class java.lang.String
Harry Potter

Can anyone tell me how do I get this to work with the namespace in 
the xml?  I thought that the registerNamespace would work, but I 
guess I don't understand what it does.

Thanks in advance for the help!

Darryl




Darryl Fenwick
Senior Product Manager
Streamsim Technologies, Inc
204 Ramona St
Palo Alto, CA 94301
+1 650 557 2196 




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org