Home arrow XML arrow Page 5 - Using Script Extensions in Xalan-Java

Using Script Extensions in Xalan-Java

This article will look at scripting languages that are not covered in the Xalan documentation, in particular, Python, VBScript, and PerlScript. In addition, we will show how Java Object instances, created in XSLT as part of the Java language extensions mechanism, are passed to these scripts and utilized by them. These samples will provide a solid foundation on which to build more complicated script-based extensions.

Author Info:
By: Seamus Donohue
Rating: 5 stars5 stars5 stars5 stars5 stars / 14
June 16, 2004
  1. · Using Script Extensions in Xalan-Java
  2. · Xalan-Java Scripting Extensions, Resources, Requirements
  3. · The Scripting Scenario
  4. · Plugging the Scripts into the XSLT Stylesheet
  5. · Python
  6. · VBScript
  7. · PerlScript
  8. · Running the Stylesheet

print this article

Using Script Extensions in Xalan-Java - Python
(Page 5 of 8 )

Python support is based on the Java Python Interpreter Jython version 2.1 from http://www.jython.org.


Ensure that the jython.jar file is in the classpath used by the XSLT processor.

Simple Function without a JavaBean Parameter

The function below shows how a Python script is used to calculate the surname output element using the name input element value.

def calculate_surname( name ) :                       
 return name.split(" " )[1]

The XSLT function call is

<xsl:value-of select="jpython:calculate_surname( string(name) )"/>

Note that for the in-line Python script, the def statement must start in column 0, otherwise a fault occurs during the Python script compilation.

Function with JavaBean Processing

The function below shows how a Python script is used to calculate the bonus value, in a similar fashion as described above in the JavaScript section. 

def calculate_bonus( quota, actual, bonusplan, bonus_table ) :               
 """ find base bonus from lookup table """
 bonus_base = long ( bonus_table.lookUp(bonusplan,1), 10 )
 """ calculate multiple, bonus multiple is zero if they underperform """
 if actual > quota :
        multiple = actual / quota
             return multiple * bonus_base
    else :
        return 0.0

Again, the def keyword must start in column 0. Also, in Jython, blocks are determined by indentation and therefore must be preserved in the stylesheet. JavaBean handling is exactly the same for both Jython and JavaScript.

The XSLT function call is:

<xsl:value-of select="jpython:calculate_bonus( number(quota), number(actual), string(bonusplan), $bonus_table )"/>

blog comments powered by Disqus

- Open XML Finally Supported by MS Office
- XML Features Added to Two Systems
- Using Regions with XSL Formatting Objects
- Using XSL Formatting Objects
- More Schematron Features
- Schematron Patterns and Validation
- Using Schematron
- Datatypes and More in RELAX NG
- Providing Options in RELAX NG
- An Introduction to RELAX NG
- Path, Predicates, and XQuery
- Using Predicates with XQuery
- Navigating Input Documents Using Paths
- XML Basics
- Introduction to XPath

Watch our Tech Videos 
Dev Articles Forums 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us 
Weekly Newsletter
Developer Updates  
Free Website Content 
Contact Us 
Site Map 
Privacy Policy 

Developer Shed Affiliates


© 2003-2019 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap
Popular Web Development Topics
All Web Development Tutorials