[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)
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/
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/
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/
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!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
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.
|
|