• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

xslt transformation with DOMSource and Streamsource

 
Anand Sidharth
Ranch Hand
Posts: 44
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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???
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic