commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Nestler <mnest...@gmail.com>
Subject [JXPath] Context Namespace-Relative Queries (v1.2)
Date Thu, 07 Apr 2005 17:08:28 GMT
Hello,

I recently had to switch from JXPath 1.1 to 1.2 in order to benefit
from some bug fixes. I am using JDOM 1.0. It appears that JXPath's
behavior regarding namespaces in JDOM trees changed and became less
convenient and flexible.

I have documents like this:

<html xmlns="http://www.w3.org/1999/xhtml">
  <table>
    <tr>
      <td>page</td>
      <td>type</td>
      <td>comment</td>
    </tr>
    <tr>
      <td><a href="/Home"/></td>
      <td>conf</td>
      <td>Home Page</td>
    </tr>
    <tr>
      <td><a href="/ToolBar"/></td>
      <td>conf</td>
      <td>Tool Bar</td>
    </tr>
  </table>
</html>

The namespace of the root element is variable and might be the XHTML
namespace, another namespace, or no namespace at all. The table
structure is always the same, and cell values vary. And I have some
code that executes the following query:

SAXBuilder sax = new SAXBuilder();
Document doc = sax.build(new StringReader(...);
Element rootElement = doc.getRootElement();
JXPathContext ctx = JXPathUtil.newContext(rootElement);
String value = ctx.getValue("/table/tr[2]/td[2]");

This worked fine with JXPath 1.1, but it doesn't work anymore with
1.2. The new JXPath version throws an exception:

org.apache.commons.jxpath.JXPathException: No value for xpath:
/table/tr[2]/td[2]
	at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:344)
	at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:280)

Why would this not work, considering that all the DOM nodes live in
the same namespace - the namespace of the context bean (root element)?
It appears that I can register the XHTML namespace, but then I have to
use a prefix for every element name in my query - and it won't work if
the namespace is not set or is different (that's possible in my app).

Is there a solution to this problem, i.e. is there a way to make
JXPath interpret the root element's namespace as the default namespace
requiring no prefix in XPath queries?

Thanks in advance,
-Michael

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


Mime
View raw message