[jdom-interest] JDOM and XPath confusion

Edelson, Justin Justin.Edelson at mtvn.com
Mon Aug 21 09:44:58 PDT 2006


Is the XML below a complete document or an element within some larger
document? If there's a parent element to the mets element, then I think
you should use
"//*[local-name()='mets']/*[local-name()='dmdSec']/*[local-name()='mdWra
p'][@MDTYPE='MODS']/*[local-name()='xmlData']/*[local-name()='mods']" as
your Xpath. 

-----Original Message-----
From: jdom-interest-bounces at jdom.org
[mailto:jdom-interest-bounces at jdom.org] On Behalf Of Richard Jones
Sent: Monday, August 21, 2006 11:10 AM
To: jdom-interest at jdom.org
Subject: [jdom-interest] JDOM and XPath confusion

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
_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com



More information about the jdom-interest mailing list