package org.xdams.utility;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Map;
import java.util.Map.Entry;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import net.sf.saxon.Configuration;
import net.sf.saxon.Controller;
import net.sf.saxon.PreparedStylesheet;
import net.sf.saxon.trans.CompilerInfo;
import net.sf.saxon.trans.XPathException;
public class TrasformXslt20 {
private static Configuration configuration = Configuration.newConfiguration();
public TrasformXslt20() {
}
public static void main(String[] args) {
if (args.length == 3) {
xsltFromFile(args[0], args[1], args[2]);
} else {
System.out.println("args[0]--> xml di input");
System.out.println("args[1]--> xsl di input");
System.out.println("args[2]--> output file");
System.exit(0);
}
}
public static String xslt(String xmlInput, FileInputStream xsltTrasform) throws Exception {
String strResult = "";
try {
Source sourceInput = new StreamSource(new StringReader(xmlInput));
Source styleSource = new StreamSource(xsltTrasform);
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
StringWriter outWriter = new StringWriter();
javax.xml.transform.Result result = new StreamResult(outWriter);
try {
controller.transform(sourceInput, result);
System.out.println(outWriter.getBuffer().toString());
strResult = outWriter.getBuffer().toString();
System.out.println("#################");
/*
* OutputFormat outputFormat = new OutputFormat(); // outputFormat.setSuppressDeclaration(true); outputFormat.setNewlines(true); outputFormat.setIndent(true); outputFormat.setIndentSize(4); XMLWriter xmlWriter = new XMLWriter(); xmlWriter.setMaximumAllowedCharacter(255);
* xmlWriter.write(outWriter); xmlWriter.flush();
*/
// strResult = result.toString();
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
throw e;
// e.printStackTrace();
}
return strResult;
}
public String xslt(FileInputStream xmlInput, String xsltTrasform) {
String strResult = null;
try {
Source sourceInput = new StreamSource(xmlInput);
Source styleSource = new StreamSource(new StringReader(xsltTrasform));
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
StringWriter outWriter = new StringWriter();
javax.xml.transform.Result result = new StreamResult(outWriter);
try {
controller.transform(sourceInput, result);
System.out.println(outWriter.getBuffer().toString());
strResult = outWriter.getBuffer().toString();
System.out.println("#################");
/*
* OutputFormat outputFormat = new OutputFormat(); // outputFormat.setSuppressDeclaration(true); outputFormat.setNewlines(true); outputFormat.setIndent(true); outputFormat.setIndentSize(4); XMLWriter xmlWriter = new XMLWriter(); xmlWriter.setMaximumAllowedCharacter(255);
* xmlWriter.write(outWriter); xmlWriter.flush();
*/
// strResult = result.toString();
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}
public static String xslt(String xmlInput, String xsltTrasform) throws Exception {
return xslt(xmlInput, xsltTrasform, null);
}
public static String xslt(InputStream xmlInput, InputStream xsltTrasform, Map<String, String> mapParams) throws Exception {
String strResult = "";
try {
Source sourceInput = new StreamSource(xmlInput);
Source styleSource = new StreamSource(xsltTrasform);
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
if (mapParams != null) {
for (Entry<String, String> entry : mapParams.entrySet()) {
controller.setParameter(entry.getKey(), entry.getValue());
}
}
StringWriter outWriter = new StringWriter();
javax.xml.transform.Result result = new StreamResult(outWriter);
try {
controller.transform(sourceInput, result);
strResult = outWriter.getBuffer().toString();
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
throw e;
}
return strResult;
}
public static String xslt(String xmlInput, String xsltTrasform, Map<String, String> mapParams) throws Exception {
String strResult = "";
try {
Source sourceInput = new StreamSource(new StringReader(xmlInput));
Source styleSource = new StreamSource(new StringReader(xsltTrasform));
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
if (mapParams != null) {
for (Entry<String, String> entry : mapParams.entrySet()) {
controller.setParameter(entry.getKey(), entry.getValue());
}
}
StringWriter outWriter = new StringWriter();
javax.xml.transform.Result result = new StreamResult(outWriter);
try {
controller.transform(sourceInput, result);
strResult = outWriter.getBuffer().toString();
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
throw e;
}
return strResult;
}
public static String xsltFromFile(String inFilename, String xslFilename) {
String strResult = "";
try {
Source sourceInput = new StreamSource(new FileInputStream(inFilename));
Source styleSource = new StreamSource(new FileInputStream(xslFilename));
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
StringWriter outWriter = new StringWriter();
javax.xml.transform.Result result = new StreamResult(outWriter);
try {
controller.transform(sourceInput, result);
System.out.println(outWriter.getBuffer().toString());
strResult = outWriter.getBuffer().toString();
System.out.println("#################");
/*
* OutputFormat outputFormat = new OutputFormat(); // outputFormat.setSuppressDeclaration(true); outputFormat.setNewlines(true); outputFormat.setIndent(true); outputFormat.setIndentSize(4); XMLWriter xmlWriter = new XMLWriter(); xmlWriter.setMaximumAllowedCharacter(255);
* xmlWriter.write(outWriter); xmlWriter.flush();
*/
// strResult = result.toString();
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}
public static void xsltFromFile(String inFilename, String xslFilename, String outFilename) {
try {
Source sourceInput = new StreamSource(new FileInputStream(inFilename));
Source styleSource = new StreamSource(new FileInputStream(xslFilename));
CompilerInfo compilerInfo = getConfiguration().getDefaultXsltCompilerInfo();
PreparedStylesheet sheet = PreparedStylesheet.compile(styleSource, getConfiguration(), compilerInfo);
Controller controller = (Controller) sheet.newTransformer();
javax.xml.transform.Result result = new StreamResult(new File(outFilename));
try {
controller.transform(sourceInput, result);
} catch (XPathException err) {
if (!err.hasBeenReported()) {
err.printStackTrace();
}
throw new XPathException("Run-time errors were reported");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static Configuration getConfiguration() {
return configuration;
}
public void setConfiguration(Configuration configuration) {
this.configuration = configuration;
}
}