[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSTL2.0 stylesheet workarounds for exceptions

  • From: Jack Bush <netbeansfan@y...>
  • To: Michael Kay <mike@s...>
  • Date: Fri, 6 Feb 2009 05:46:11 -0800 (PST)

Re:  XSTL2.0  stylesheet workarounds for exceptions

Hi Michael,

 

OK, you are right once again. It was Xalan that was causing a nuisance this time. I have removed Xalan.jar from CLASSPATH and it was smooth sailing with Saxon 9.1 as far as using empty() is concerned. I will use other approaches to associate Saxon 9.1 to this application to gain optimum performance. In the meantime, I now get 2 <hobbie> elements regardless of whether it exist or not. In other word, the default <hobbies>Unknown</hobbies> element is always generated.

 

The changes made to the original stylesheet are as follows:

 

<xsl:template match="/">

<employee>

<xsl:apply-templates select="//ns:p"/>

<xsl:variable name="hobbies" select="ns:p[ns:strong='Hobbies:']"/>

<xsl:apply-templates select="$hobbies"/>

<xsl:if test="empty($hobbies)">

<hobbies>Unknown</hobbies>

</xsl:if>

</employee>

</xsl:template>

<xsl:template match="ns:p[ns:strong='Hobbie:']|ns:p[ns:strong='Hobbies:']">

<xsl:for-each select="ns:a">

<hobbie><xsl:value-of select="."/></hobbie>

</xsl:for-each>

</xsl:template>

 

As a result, how to change the stylesheet to create a default (<hobbies>Unknown</hobbies>) element only when "ns:p[ns:strong='Hobbies:']" is invalid? Would a <xsl:choose be suitable in this case but I can't seems to wrap it around the second match template.

 

Thank you very much once again for your invaluable guidances.

Jack



From: Michael Kay <mike@s...>
To: Jack Bush <netbeansfan@y...>
Cc: xml-dev@l...
Sent: Friday, 6 February, 2009 8:21:09 PM
Subject: RE: XSTL stylesheet workarounds for exceptions

Do
 
System.err.println(hobbiesTransformer.getClass())
 
to see what XSLT transformation engine you have loaded. All the evidence suggests it's a 1.0 transformer - probably Xalan, possibly Saxon6.
 
Relying on the classpath to pick up the right XSLT engine is notoriously error-prone. If your code depends on having an XSLT 2.0 processor, the safest thing is to instantiate Saxon directly:
 
hobbiesTransformer = new net.sf.saxon.TransformerFactoryImpl();
 
This is incidentally much faster than searching the classpath. (In extreme cases, searching the classpath to find a TransformerFactory can take longer than the entire transformation).
 
If you don't want a compile-time reference to Saxon in your code, you can either (a) instantiate the factory using reflection, or (b) set the system property
 
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl")
 
Michael Kay
http://www.saxonica.com/


From: Michael Kay <mike@s...>
To: Jack Bush <netbeansfan@y...>; butlerdi@g...
Cc: xml-dev@l...
Sent: Thursday, 5 February, 2009 12:26:02 AM
Subject: RE: XSTL stylesheet workarounds for exceptions

<xsl:template match="ns:p[ns:strong='Hobbie:']|ns:p[ns:strong='Hobbies:']">


Now the only question left is the second half ( ii ) of the original post
included below:

   

    ( ii ) I also like to add a default generic value for any missing
element. Say if there are no

    <p><strong>Hobbies:</strong></p> in such document, yet I still would
like to generate a

    null element such as <hobbies>Unknown</hobbies>. 

   
You need to do this at the next level up, where you are applying-templates
to the p elements. Something like

<xsl:variable name="hobbies" select="ns:p[ns:strong='Hobbies:']"/>
<xsl:apply-templates select="$hobbies"/>
<xsl:if test="empty($hobbies)">
  ... default output goes here ...
</xsl:if>

Michael Kay
http://www.saxonica.com/


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. http://au.rd.yahoo.com/homepage/mailtagline/*http://au.docs.yahoo.com/homepageset/?p1=other&p2=au&p3=tagline.


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. http://au.rd.yahoo.com/homepage/mailtagline/*http://au.docs.yahoo.com/homepageset/?p1=other&p2=au&p3=tagline..


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. http://au.rd.yahoo.com/homepage/mailtagline/*http://au.docs..yahoo.com/homepageset/?p1=other&p2=au&p3=tagline.


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. http://au.rd.yahoo.com/homepage/mailtagline/*http://au.docs.yahoo.com/homepageset/?p1=other&p2=au&p3=tagline.


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.