Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

XPath, XLink, XPointer and Java

843834Apr 20 2007 — edited Apr 23 2007
Hello folks!

This is the first time I actually deal with XPath, XLink and Java but I didn't think I would meet so much troubles... but I hope they are trivial for you, Java gurus! :-)

Well, the issue is this:

I have an XML document with xlinks with xpointers. I have to read the xlink content (easy), load the XML source in a DOM (pretty easy), ad perform the xpath which comes from the xpointer to such linked document (mmmmhhhhhhh).

Here I have a simplified example code running on J2SE 5.0, just to execute the xpath selection:
package testproject;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.*;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class XLinkParser {
    
    /** Creates a new instance of XLinkParser */
    public XLinkParser() {
    }
    
    public static void main(String[] args) {
        XLinkParser xp = new XLinkParser();
        
        String result = "";
        try {
            xp.performXPath(
                    new URL("http://www.iasf-milano.inaf.it/~luigi/projects/vo/regions/v0.1/cdfs.xml"),
                    "//TABLEDATA[1]/TR[5]/TD[1]");
        } catch (XPathExpressionException ex) {
            ex.printStackTrace();
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (XPathFactoryConfigurationException ex) {
            ex.printStackTrace();
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        }
        
    }
    
    public void performXPath(URL xml, String xpath) throws XPathFactoryConfigurationException,
            ParserConfigurationException, IOException, SAXException, XPathExpressionException {
        
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpe = xpf.newXPath();
        System.err.println("Loaded XPath Provider " + xpe.getClass().getName());
        
        // Build the source document.
        DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
        System.err.println("Using DocumentBuilderFactory " + dfactory.getClass());
        
        dfactory.setNamespaceAware(true);
        
        DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
        System.err.println("Using DocumentBuilder " + docBuilder.getClass());
        
        Node doc = docBuilder.parse(new InputSource(xml.openStream()));
        
        // Compile the XPath expressions
        XPathExpression findTR = xpe.compile(xpath);
        
        // Find the nodes containing the requested path
        NodeList nodes = (NodeList) findTR.evaluate(doc, XPathConstants.NODESET);
        
        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println(nodes.item(i).getNodeValue());
        }
        
    }
    
}
It should work (IMO), returning the content of "//TABLEDATA[1]/TR[5]/TD[1]" (you may look at the source which actually exists)... bu it doesn't. Perhaps is a syntax problem... I think Xerces (which is the default implementation in J2SE 5.0 as far as I know) implements only XPath 1.0, but such expression should be compliant. Isn't it?

What am I mistaking?

Thanks in advance!
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 21 2007
Added on Apr 20 2007
2 comments
318 views