'XSLT Transformation using Xalan-Java Extensions
I am trying to convert XML to CSV by using "Xalan-Java Extensions" [XSLT Template include Java Coding] , but I unfortunately with no positive results.
I added external libs (bsf.jar;js.jar;xalan.jar;xercesImpl.jar;xml-apis.jar) to my java projects before, but it seems that this one is not working, I'm getting this error:
Error during transformation - java.lang.NullPointerException; Line#: 55; Column#: 45
My Java code:
public class transformCSV {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File stylesheet = new File("style.xsl");
File xmlSource = new File("data.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlSource);
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
Source source = new DOMSource(document);
Result outputTarget = new StreamResult(new File("result.csv"));
transformer.transform(source, outputTarget);
System.out.println(outputTarget);
System.out.println("TEST");
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
How can I call org.apache.xalan.xslt.Process within in java code? Without Using commandline and classpath settings.
Here are XSl-Template (taken from Apache Example) and Data.xml:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:counter="MyCounter"
extension-element-prefixes="counter"
version="1.0">
<xalan:component prefix="counter"
elements="init incr" functions="read">
<xalan:script lang="javascript">
var counters = new Array();
function init (xslproc, elem) {
name = elem.getAttribute ("name");
value = parseInt(elem.getAttribute ("value"));
counters[name] = value;
return null;
}
function read (name) {
return "" + (counters[name]);
}
function incr (xslproc, elem)
{
name = elem.getAttribute ("name");
counters[name]++;
return null;
}
</xalan:script>
</xalan:component>
<xsl:template match="/">
<HTML>
<H1>JavaScript Example.</H1>
<counter:init name="index" value="1"/>
<p>Here are the names in alphabetical order by last name:</p>
<xsl:for-each select="doc/name">
<xsl:sort select="@last"/>
<xsl:sort select="@first"/>
<p>
<xsl:text>[</xsl:text>
<xsl:value-of select="counter:read('index')"/>
<xsl:text>]. </xsl:text>
<xsl:value-of select="@last"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="@first"/>
</p>
<counter:incr name="index"/>
</xsl:for-each>
</HTML>
</xsl:template>
</xsl:stylesheet>
Data.xml:
<?xml version="1.0"?>
<doc>
<name first="Sanjiva" last="Weerawarana"/>
<name first="Joseph" last="Kesselman"/>
<name first="Stephen" last="Auriemma"/>
<name first="Igor" last="Belakovskiy"/>
<name first="David" last="Marston"/>
<name first="David" last="Bertoni"/>
<name first="Donald" last="Leslie"/>
<name first="Emily" last="Farmer"/>
<name first="Myriam" last="Midy"/>
<name first="Paul" last="Dick"/>
<name first="Scott" last="Boag"/>
<name first="Shane" last="Curcuru"/>
<name first="Marcia" last="Hoffman"/>
<name first="Noah" last="Mendelsohn"/>
<name first="Alex" last="Morrow"/>
</doc>
Solution 1:[1]
it works for me
TransformerFactory oFactory = TransformerFactory.newInstance();
String xml = "test.xml";
String xsl = "test.xsl";
javax.xml.transform.Templates oTemplates = oFactory.newTemplates(
new javax.xml.transform.stream.StreamSource(xsl)
);
javax.xml.transform.Transformer transformer = oTemplates.newTransformer();
transformer.transform(
new javax.xml.transform.stream.StreamSource(xml),
new javax.xml.transform.stream.StreamResult(System.out));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Inshua |
