Subject: RE: [xsl] Problem using variables with xpath From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 5 Apr 2007 18:52:45 +0100 |
>the same piece of XSL is unable to do that string compare what are the symptoms? Does it say "I am unable to do this string compare", or what? > <xsl:variable name="pdfdoctitle"> > <xsl:value-of select="//Document/@url"/> > </xsl:variable> Don't do this, it's very inefficient and sometimes means something different from what you intended. Do: <xsl:variable name="pdfdoctitle" select="//Document/@url"/> Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Raghavan [mailto:raghavan479@xxxxxxxxx] > Sent: 05 April 2007 17:40 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Problem using variables with xpath > > Apologize for the long mail > > Am quite new to XSL and I am running into a strange problem. > > I have 2 xml files > 1) input.xml 2) metadata.xml > The xsl is applied on input.xml. The xsl extracts the data > corresponding to "url" attribute. This value is looked up > (using xpath) on the second xml > (metadata.xml) and extract the necessary values from metadaat.xml > > I've attached the necessary source files. I constructed the > xsl using Stylus Studio (also tried > XMLspy) and xsl works as expected. Then I have this simple > Java code that performs XSL transformation and the same piece > of XSL is unable to do that string compare > > Note: > During my unit testing > I replaced the following line with a static text and the > transformation worked as expected original:<xsl:for-each > select="$doc2node//doc[@id=$pdfdoctitle]"> > modified:<xsl:for-each > select="$doc2node//doc[@id='http://www.something.com/path1/Doc > ument1.pdf']"> > > Since am new to XSL, am not sure if we can use variables in > XPath in first place!!! > > Thanks, > -Raghav > > -------------------------------------------------------------- > --------------------------- > Input XML > -------------------------------------------------------------- > --------------------------- > <?xml version="1.0" encoding="UTF-8"?> > <Content> > <Document Type="Web" > url="http://www.something.com/path1/Document1.pdf"/> > </Content> > > -------------------------------------------------------------- > --------------------------- > My XSL > -------------------------------------------------------------- > --------------------------- > <?xml version='1.0' encoding='utf-8'?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output method="html"/> > <xsl:template match="/Content"> > > <xsl:variable name="pdfdoctitle"> > <xsl:value-of select="//Document/@url"/> > </xsl:variable> > > <xsl:variable name="doc2node" > select="document('metadata.xml')"/> > <html><head></head><body> > <p> > <!-- String compare scenatio 1 > --> > <rr> > <xsl:for-each select="$doc2node//doc"> > <xsl:if test="@id=$pdfdoctitle"> > <xsl:value-of > select="@title" /> > </xsl:if> > </xsl:for-each> > </rr> > <!-- String compare scenatio 2 > --> > <rr2> > <xsl:for-each > select="$doc2node//doc[@id=$pdfdoctitle]"> > <xsl:value-of select="@title"/> > </xsl:for-each> > <rr2> > <!-- Display value of pdfdoctitle --> > <rr3> > <xsl:value-of select="$pdfdoctitle"/> > </rr3> > > </p> > </body></html> > </xsl:template> > </xsl:stylesheet> > > -------------------------------------------------------------- > --------------------------- > metadata.xml file used in the XSL > -------------------------------------------------------------- > --------------------------- > <?xml version="1.0" encoding="UTF-8"?> > <documents> > <doc id="x" title="title for document x" > issuedate="12-Aug-2005" issuenumber="1" /> > <doc id="z" title="This is document z title" > issuedate="1-Jan-2006" issuenumber="2" /> > <doc id="y" title="This is document y title" > issuedate="10-Aug-2006" issuenumber="2" /> > <doc > id="http://www.something.com/path1/Document1.pdf" > title="Title for something document" > issuedate="10-Aug-2005" issuenumber="22" /> </documents> > > -------------------------------------------------------------- > --------------------------- > Transform.java > -------------------------------------------------------------- > --------------------------- > import javax.xml.transform.Source; > import javax.xml.transform.Transformer; > import javax.xml.transform.TransformerFactory; > import javax.xml.transform.stream.StreamSource; > import javax.xml.transform.stream.StreamResult; > import java.io.*; > > public class Transform { > > /** > * Performs an XSLT transformation, sending the results > * to System.out. > */ > public static void main(String[] args) throws Exception { > if (args.length != 2) { > System.err.println( > "Usage: java Transform [xmlfile] [xsltfile]"); > System.exit(1); > } > > File xmlFile = new File(args[0]); > File xsltFile = new File(args[1]); > > // JAXP reads data using the Source interface > Source xmlSource = new StreamSource(xmlFile); > Source xsltSource = new > StreamSource(xsltFile); > > // the factory pattern supports different XSLT processors > TransformerFactory transFact = > TransformerFactory.newInstance(); > Transformer trans = > transFact.newTransformer(xsltSource); > > trans.transform(xmlSource, new > StreamResult(System.out)); > } > } > > > > ______________________________________________________________ > ______________________ > Don't get soaked. Take a quick peek at the forecast with the > Yahoo! Search weather shortcut. > http://tools.search.yahoo.com/shortcuts/#loc_weather
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Problem using variables with , Raghavan | Thread | RE: [xsl] Problem using variables w, Raghavan |
RE: [xsl] XSL-FO page layout questi, G. Ken Holman | Date | RE: [xsl] Problem using variables w, Raghavan |
Month |