This week's book giveaways are in the Java EE and JavaScript forums.
We're giving away four copies each of The Java EE 7 Tutorial Volume 1 or Volume 2(winners choice) and jQuery UI in Action and have the authors on-line!
See this thread and this one for details.
The moose likes XML and Related Technologies and the fly likes xslt transformation with DOMSource and Streamsource Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Engineering » XML and Related Technologies
Bookmark "xslt transformation with DOMSource and Streamsource" Watch "xslt transformation with DOMSource and Streamsource" New topic
Author

xslt transformation with DOMSource and Streamsource

Anand Sidharth
Ranch Hand

Joined: Dec 17, 2003
Posts: 44
When a node being used in the tranformation is empty the DOMSource and Stream
source produce different results. For example -
Input Xml -
-------------------------
<Root>
<SampleData attr1="" attr2="b" attr3="c" />
</Root>
-------------------------
XSL -
-------------------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl utput method="xml" indent="yes" xalan:indent-amount="4"
xmlns:xalan="http://xml.apache.org/xslt"/>
<xsl:template match="SampleData">
<SampleData>
<attr1><xsl:value-of select="@attr1" /></attr1>
<attr2><xsl:value-of select="@attr2" /></attr2>
<attr3><xsl:value-of select="@attr3" /></attr3>
</SampleData>
</xsl:template>
</xsl:stylesheet>
-------------------------
Transformer class -
-------------------------
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class SampleTransform
{
public static void main(String[] args) throws Exception
{
String sampleFileName="sample-input-data.xml";
TransformerFactory tFactory = TransformerFactory.newInstance();
DocumentBuilder builder = DocumentBuilderFactory.newInstance
().newDocumentBuilder();
InputSource inputSource = new InputSource(new FileReader(sampleFileName));
Document document = builder.parse(inputSource);
document.normalize();
DOMSource domSource = new DOMSource();
domSource.setNode(document);
// Create the transformer
Transformer transformer = tFactory.newTransformer(new StreamSource
("sample-transform.xsl"));


// transform the input xml using stream source
transformer.transform(new StreamSource(sampleFileName),
new StreamResult(new FileOutputStream("output-using-stream.out")));
// transform the input xml using dom source
transformer.transform(domSource, new StreamResult(new FileOutputStream
("output-dom.out")));
System.out.println("check output files output-dom.out and output-
stream.out");
}
}
-------------------------

The output using the stream source is -
-------------------------
<?xml version="1.0" encoding="UTF-8"?>
<SampleData>
<attr1/>
<attr2>b</attr2>
<attr3>c</attr3>
</SampleData>
-------------------------
Output using the dom source is
-------------------------
<?xml version="1.0" encoding="UTF-8"?>
<SampleData>
<attr1>
</attr1>
<attr2>b</attr2>
<attr3>c</attr3>
</SampleData>
-------------------------
Please note the extra new line character in the "attr1" element. The dom source
and stream source should produce the same output. However, in the case shown
about, this does not happen.
Can anybody tell why this occurs???
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: xslt transformation with DOMSource and Streamsource