- From: "Michael Kay" <mike@s...>
- To: "'Jack Bush'" <netbeansfan@y...>
- Date: Fri, 6 Feb 2009 09:21:09 -0000
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.
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
|