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

Re: XSTL stylesheet workarounds for exceptions

  • From: Jack Bush <netbeansfan@y...>
  • To: Michael Kay <mike@s...>
  • Date: Tue, 17 Feb 2009 04:51:24 -0800 (PST)

Re:  XSTL stylesheet workarounds for exceptions

Hi Michael,

 

I came across the following minor stumbling block when trying to instantiate Saxon directly as opposed to searching through CLASSPATH recommended by yourself earlier:

 

( i ) Replaced import javax.xml.transform.* with net.sf.saxon.TransformerFactoryImpl.

( ii ) Replaced TransformerFactory stateFactory = TransformerFactory.newInstance() with

       net.sf.saxon.TransformerFactoryImpl hobbiesTransformer = new net.sf.saxon.TransformerFactoryImpl().

       FileInputStream hobbiesStyleSheetIS = new FileInputStream(hobbiesStyleSheet);

       BufferedInputStream hobbiesStyleSheetBIS = new BufferedInputStream(hobbiesStyleSheetIS);

( iii ) Replaced Transformer hobbiesTransformer = hobbiesFactory.newTransformer(new StreamSource(hobbiesStyleSheetBIS)) with

       hobbiesTransformer.newTransformer(new StreamSource(hobbiesStyleSheetBIS)).

 

       JDOMSource hobbiesSource = new JDOMSource(hobbiesOriginaljdomDocument);

       JDOMResult hobbiesResult = new JDOMResult();

 

       System.err.println(hobbiesTransformer.getClass());

( iv ) Would like to replace hobbiesTransformer.transform(hobbiesSource, hobbiesResult) with

stateTransformer.? but couldn't find a match.

 

In other word, I couldn't find an equivalent statement in Saxon91 to do the transformation in step ( iv ) to swap out the default Java Xalan code.

 

Thanks a lot for your help,

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: Jack Bush [mailto:netbeansfan@y...]
Sent: 06 February 2009 03:02
To: Michael Kay
Cc: xml-dev@l...
Subject: Re: XSTL stylesheet workarounds for exceptions

Hi Michael,

 

I ran the transformation the same way as when using Saxon 6.5 with the following Java code from Netbeans 6.1:

 

.......

SAXBuilder stateBuilder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser", false);

FileInputStream hobbiesIS = new FileInputStream(hobbiesXmlFile);

BufferedInputStream hobbiesBIS = new BufferedInputStream(hobbiesIS);

Document hobbiesOriginaljdomDocument = stateBuilder.build(hobbiesBIS);

 

TransformerFactory hobbiesFactory = TransformerFactory.newInstance();

FileInputStream hobbiesStyleSheetIS = new FileInputStream(hobbiesStyleSheet);

BufferedInputStream hobbiesStyleSheetBIS = new BufferedInputStream(hobbiesStyleSheetIS);

 

Transformer hobbiesTransformer = stateFactory.newTransformer(new StreamSource(hobbiesStyleSheetBIS));

 

JDOMSource hobbiesSource = new JDOMSource(hobbiesOriginaljdomDocument);

JDOMResult hobbiesResult = new JDOMResult();

 

stateTransformer.transform(hobbiesSource, hobbiesResult);

 

Nothing has been changed apart from replacing saxon.jar, saxon-jdom.jar, saxpath.jar with saxon9.jar, saxon9-jdom.jar, saxon9-xpath.jar in the compilation CLASSPATH.

 

I run this program (SHIFT-F6 or RUN => Run file) to start transformation in Netbeans.

 

Thanks,

Jack



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

How are you running the transformation?
 
Michael Kay
http://www.saxonica.com/


From: Jack Bush [mailto:netbeansfan@y...]
Sent: 05 February 2009 19:23
To: Michael Kay
Cc: xml-dev@l...
Subject: Re: XSTL stylesheet workarounds for exceptions

Hi Michael,
 
Your are right and I have reverted the XML version in the stylesheet to 1.0. However, I am back to where I started from by getting the can find empty() again.
 
Below is the detail of my CLASSPATH:
 
E:\Software Development\XML\tagsoup-1.2.jar;E:\Software Development\XML\JDOM\jdom-1.1\build\jdom.jar;E:\Software Development\XML\JDOM\jdom-1.1\lib\jaxen-jdom.jar;E:\Software Development\XML\JDOM\jdom-1.1\lib\jaxen-core.jar;E:\Software Development\XML\JDOM\jdom-1.1\lib\xalan.jar;E:\Software Development\XML\Saxon\9.1\saxon9-jdom.jar;E:\Software Development\XML\Saxon\9.1\saxon9-xpath.jar;E:\Software Development\XML\Saxon\9.1\saxon9.jar;E:\Software Development\XML\JDOM\jdom-1.1\lib\xerces.jar;E:\Software Development\XML\JDOM\jdom-1.1\lib\saxpath.jar
 
Any idea on which jar file is missing?
 
Thanks a lot,
 
Jack


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

It sounds as if you changed the XML version to "2.0" when you intended to change the XSLT version.
 
Michael Kay
http://www.saxonica.com/


From: Jack Bush [mailto:netbeansfan@y...]
Sent: 05 February 2009 12:30
To: Michael Kay
Cc: xml-dev@l...
Subject: Re: XSTL stylesheet workarounds for exceptions

Hi Michael,

 

I encountered the following error when switching over to Saxon 9.1 Open Source version so that I could use the empty() as suggested:

 

[Fatal Error] javax..xml.transform.stream.StreamSource:1:20: XML version "2.0" is not supported, only XML 1.0 is supported.

javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerConfigurationException: javax..xml.transform.TransformerException: org.xml.sax.SAXParseException: XML version "2.0" is not supported, only XML 1.0 is supported.

at org..apache.xalan.processor.TransformerFactoryImpl..newTransformer(TransformerFactoryImpl.java:795)

 

Below is where StreamSource is used in my Java application:

 

Transformer hobbiesTransformer = hobbiesFactory.newTransformer(new StreamSource(hobbiesStyleSheetBIS));

JDOMSource hobbiesSource = new JDOMSource(hobbiesOriginaljdomDocument);

JDOMResult hobbiesResult = new JDOMResult();

hobbiesTransformer.transform(hobbiesSource, hobbiesResult);

 

What is the alternative to using StreamSource in XSLT 2.0?

 

Many thanks again,

Jack




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.