Altova Mailing List Archives>Archive Index >comp.text.xml Archive Home >Recent entries [Thread Prev] >Thread Next - Re: xsltproc vs XPath evaluate() method xsltproc vs XPath evaluate() methodTo: NULL Date: 6/3/2008 12:20:00 PM I'm trying to figure out how XPath expressions work, and how I can use them to extract data into a particular format. I can extract the data I want using an XPath expression, but not with an XSLT stylesheet. Here's the Java/XPath I'm using: import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import javax.xml.xpath.*; public class XpathEval { public static void main(String []args) { try { XpathEval loader = new XpathEval("src.xml"); loader.evaluateXpath(); } catch(Exception e) { System.out.println(e); } } public XpathEval(String filename) throws javax.xml.parsers.ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); m_doc = db.parse(new File(filename)); } public void evaluateXpath(String xpathExpr) throws XPathExpressionException { XPathFactory f = XPathFactory.newInstance(); XPath p = f.newXPath("/nuc2/Exer/ExerciseNickname"); NodeList nl = (NodeList)p.evaluate(xpathExpr, m_doc, XPathConstants.NODESET); for (int i = 0; i < nl.getLength(); i++) System.out.println(nl.item(i).getNodeName() + " -> " + nl.item(i).getTextContent()); } private Document m_doc; } However, if I try to extract & format the data via xsltproc it doesn't extract the data. Here's the command I use: xsltproc xsltStyleSheet.xsl src.xml with the following for xsltStyleSheet.xsl: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> EXER/<xsl:value-of select="/nuc2/Exer/ExerciseNickname"/>/NICK:<xsl:value-of select="/nuc2/Exer/ExerciseAdditionalIdentifier"/>// </xsl:template> </xsl:stylesheet> Instead of printing out what I expect (the odd format is a requirement for what I'm trying to convert it to): EXER/pushups/NICK:whatever// it prints this: EXER//NICK:// If I change the XPath expression in my XSLT stylesheet to select="//ExerciseNickname" then it works. But in the full XML file there are places where that won't work - there's /a/b/fieldname and /x/y/fieldname and I want exactly one of them. I suppose I could make that work, but I'd like to know what I'm doing wrong. The XML source (src.xml, above) is: <ns2:nuc2 xsi:schemaLocation="nuc2.xsd" xmlns:ns1="Exer_Sets" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="nuc2"> <ns1:Exer SetSequence="1" SetDescription="Exercise Identification"> <ExerciseNickname>pushups</ExerciseNickname> <ExerciseAdditionalIdentifier>whatever</ExerciseAdditionalIdentifier> </ns1:Exer> </ns2:nuc2> I'm giving it the same XPath expression in both cases ("/nuc2/Exer/ExerciseNickname") - one finds what I'm looking for, the other doesn't. I'm using Java 1.6.0_05 on Fedora 8. xsltproc comes from the libxslt package, version 1.1.24. Any clues? thanks! -- Al Dunstan, Software Engineer OptiMetrics, Inc. 3115 Professional Drive Ann Arbor, MI 48104-5131 | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
