aspose file tools*
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 EJB 3 in Action this week in the EJB and other Java EE Technologies 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???
 
 
subject: xslt transformation with DOMSource and Streamsource
 
Similar Threads
XML + XSL => HTML
Help on setPrarameter() fror transformer..
XML Parsing
URGENT!!!! Xalan problem in Servlet with JRun
DocumentBuilder.parse not working for String input