XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] 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@saxonica..com>
To: Jack Bush <netbeansfan@yahoo.com.au>
Cc: xml-dev@lists.xml.org
Sent: Friday, 6 February, 2009 8:21:09 PM
Subject: RE: [xml-dev] 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@yahoo.com.au]
Sent: 06 February 2009 03:02
To: Michael Kay
Cc: xml-dev@lists.xml.org
Subject: Re: [xml-dev] 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@saxonica.com>
To: Jack Bush <netbeansfan@yahoo.com.au>
Cc: xml-dev@lists.xml.org
Sent: Friday, 6 February, 2009 9:23:09 AM
Subject: RE: [xml-dev] XSTL stylesheet workarounds for exceptions

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


From: Jack Bush [mailto:netbeansfan@yahoo.com.au]
Sent: 05 February 2009 19:23
To: Michael Kay
Cc: xml-dev@lists.xml.org
Subject: Re: [xml-dev] 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@saxonica.com>
To: Jack Bush <netbeansfan@yahoo.com.au>
Cc: xml-dev@lists.xml.org
Sent: Friday, 6 February, 2009 2:07:45 AM
Subject: RE: [xml-dev] 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@yahoo.com.au]
Sent: 05 February 2009 12:30
To: Michael Kay
Cc: xml-dev@lists.xml.org
Subject: Re: [xml-dev] 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@saxonica.com>
To: Jack Bush <netbeansfan@yahoo.com.au>; butlerdi@gmail.com
Cc: xml-dev@lists.xml.org
Sent: Thursday, 5 February, 2009 12:26:02 AM
Subject: RE: [xml-dev] 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. Find out more.


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. Find out more..


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. Find out more.


Make Yahoo!7 your homepage and win a trip to the Quiksilver Pro. Find out more.

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


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS