Subject: RE: 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: 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
|