Subject: RE: [xsl] Problem using variables with xpath From: Raghavan <raghavan479@xxxxxxxxx> Date: Thu, 5 Apr 2007 11:06:25 -0700 (PDT) |
Thanks for the quick response Mike. [mike]:what are the symptoms? Does it say "I am unable to do this string compare",or what? [raghav]:There are no warnings or errors. I just dont see the text extracted from the title attr inside that block --- Michael Kay <mike@xxxxxxxxxxxx> wrote: > >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 > > ____________________________________________________________________________________ No need to miss a message. Get email on-the-go with Yahoo! Mail for Mobile. Get started. http://mobile.yahoo.com/mail
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Problem using variables w, Michael Kay | Thread | [xsl] Problem using variables with , Raghavan |
RE: [xsl] Problem using variables w, Michael Kay | Date | [xsl] Problem using variables with , Raghavan |
Month |