[jdom-interest] JDOM and XPath confusion

Richard Jones richard.d.jones at imperial.ac.uk
Mon Aug 21 08:09:59 PDT 2006


Hi Folks,

Apologies for the newbie question; I hope this list is the right place 
to post this.

I'm trying to use the JDOM implementation for XPath, and am consistently 
getting no results from any of my queries, despite following a variety 
of different documentation pages all of which claim to work.  I must be 
doing something really obvious wrong, but I can't for the life of me see 
what it is.

I have an XML document:

<mets xmlns="http://www.loc.gov/METS/">
   <dmdSec ID="ID0">
     <mdWrap MDTYPE="MODS">
       <xmlData>
         <mods xmlns="http://www.loc.gov/mods/v3" version="3.2">
	  <genre>Journal</genre>
	  <titleInfo>
	    <title>
		Activation of the light sensitive channels,
		TRP and TRPL, in Drosophila.
             </title>
           </titleInfo>
           <name type="personal">
	    <role>
               <roleTerm type="text">author</roleTerm>
	    </role>
	    <namePart>xxxx</namePart>
	    <description>111111</description>
	    <description>aaaaaa</description>
	  </name>
	</mods>
       </xmlData>
     </mdWrap>
   </dmdSec>
</mets>

And I'm trying to extract the section starting <mods> using an XPath 
expression.

So far, I have tried the following (the first one of which evaluates 
correctly using the XPath Explorer):

/*[local-name()='mets']/*[local-name()='dmdSec']/*[local-name()='mdWrap'][@MDTYPE='MODS']/*[local-name()='xmlData']/*[local-name()='mods']

/mets/dmdSec/mdWrap[@MDTYPE='MODS']/xmlData/mods

using code that looks like this:

String xpath=ConfigurationManager.getProperty("mods.xpath");
System.out.println("using xpath: " + xpath);
XPath x = XPath.newInstance(xpath);
x.addNamespace("mets", "http://www.loc.gov/METS/");
List mods = x.selectNodes(mets);
System.out.println("I counted: " + mods.size() + "results");
System.out.println("This is the mods data:" + mods.toString());

I have also tried using

/mets:mets/mets:dmdSec/mets:mdWrap[@MDTYPE='MODS']/mets:xmlData

to get the wrapper XML, and also replacing:

x.addNamespace("mets", "http://www.loc.gov/METS/");

with

x.addNamespace(mets.getNamespace());

where mets is the JDOM Element object that I am querying, representing 
the above XML.  I've also tried leaving this line out altogether.

Can anyone see what I'm doing wrong?  I always get the result:

using xpath: [whatever expression I'm trying]
I counted: 0 results
This is the mods data:[]

Any help would be very gratefully received; thanks in advance

All the best,

-- 
Richard
-------
Richard Jones
Web and Database Technology Specialist
Imperial College London
t: +44 (0)20 759 41815
e: richard.d.jones at imperial.ac.uk


More information about the jdom-interest mailing list