How to run XSLT from Eclipse
Skills required | XML |
---|---|
Time required (minutes) | 15 |
Intended audience | Developer |
Difficulty | Easy |
Category | Document |
Objective
A programming language with the status of a W3C Recommendation , XSLT is primarily designed to process XML content. It is particularly well suited to transforming XML from one syntax to another. This could be to a different XML structure, such as XHTML or HTML. Or to a non-XML syntax, such as plain text or JSON. This tutorial shows how to use the Eclipse IDE to process an XSLT transformation.
Prerequisites
To complete this tutorial requires:
- A computer with the Eclipse IDE installed – to simplify the setup, use the Eclipse IDE for Java EE developers, which includes packages for XML and XSLT editing. Download it from http://www.eclipse.org/downloads/ .
- The Buildship plugin installed on Eclipse – download this in Eclipse, via the Eclipse Marketplace.
- Only Gradle v4.9 or earlier is supported in this tutorial – configure this by editing the
gradle/wrapper/gradle-wrapper.properties
and changing the version to4.9
. - The sample files for this tutorial are available on GitHub
Tutorial
Installing an XSLT processor
Running XSLT code requires an XSLT processor. The following steps will install the Saxon XSLT processor in Eclipse.
- Create a new general project in Eclipse (e.g.
xslt-transform
). - In the project root, create a new file called
build.gradle
, and copy the code below into it. - Right-click on the project and select Configure > Add Gradle Nature.
buildscript { ext.data_folder = 'sample' ext.xslt_file = 'sample.xsl' ext.input_file = '/' ext.output_file = '/' ext.xslt_param1 = '' ext.xslt_param2 = '' ext.xslt_param3 = '' ext.saxon_version = '9.8.0-14' repositories { mavenCentral() } dependencies { classpath "net.sf.saxon:Saxon-HE:$saxon_version" } } apply plugin: 'java' sourceCompatibility = 1.8 repositories { mavenCentral() } configurations { xslt } dependencies { xslt "net.sf.saxon:Saxon-HE:$saxon_version" } // Ensure we have an output dir project.file("output/$data_folder").mkdirs() // Transform using XSLT task transform(group: 'xslt', type: JavaExec) { classpath = configurations.xslt main = 'net.sf.saxon.Transform' inputs.dir 'input/$data_folder' inputs.file 'src/main/xslt/$xslt_file' args( "-s:input/$data_folder$input_file", "-xsl:src/main/xslt/$xslt_file", "-o:output/$data_folder$output_file", "$xslt_param1", "$xslt_param2", "$xslt_param3" ) } // Rename output files task rename(group: 'xslt', type: Copy) { from "output/$data_folder" into "rename/$data_folder" rename '(.*)\\.xml', '$1.psml' }
Run the XSLT code
- Create a project data folder (e.g.
input/films
) and copy the input XML files (*.xml
) to it. - Create a project code folder (e.g.
src/main/xslt
) and copy the XSLT code file (films.xsl
) to it. - Modify the
build.gradle
file so theext.data_folder
andext.xslt_file
match the above, for example:ext.data_folder = 'films' ext.xslt_file = 'films.xsl'
- In the right hand Eclipse panel, click on the Gradle Tasks tab to expand the project, then click on xslt > transform to process the XML files from the
input/[data folder]
to theoutput/[data folder]
. - In the left hand Eclipse panel, select the project and refresh the folders by pressing F5. Open the files under
output/[data folder]
to check the content.
- To transform a single file from the input folder, edit
ext.input_file
andext.output_file
with the desired filenames. For example:ext.input_file = '/myinput.xml' ext.output_file = '/myoutput.xml'
- To set parameters on the XSLT transform, edit
ext.xslt_param[N]
with the desired values. For example:ext.xslt_param1 = 'output-base=.' ext.xslt_param2 = 'filename=word export' ext.xslt_param3 = 'split=true'
Add additional parameters to thetask transform()
code. For a full list of validargs()
see http://www.saxonica.com/documentation/#!using-xsl/commandline . - When using the
document()
function in XSLT, the path will be relative to thesrc/main/xslt
folder. To reference XML files, put them in this folder, or point to the input folder by using '..
' in the path e.g.document('../../../input/sample/sample.xml')
Rename the output files to .psml
(optional)
If the output files have a .xml
extension but use the PSML format for upload to PageSeeder, use the following to change the extension to .psml
:
- In the right hand Eclipse panel, select the Gradle Tasks tab, expand the project and click on xslt > rename.
- In the left hand Eclipse panel, select the project and refresh the folders by pressing F5. Open the files under
rename/[data folder]
to check the content.