You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2003/09/26 21:40:29 UTC

DO NOT REPLY [Bug 23446] New: - Transformation produces different results with DOM and Stream sources

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23446>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23446

Transformation produces different results with DOM and Stream sources

           Summary: Transformation produces different results with DOM and
                    Stream sources
           Product: XalanJ2
           Version: 2.5
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Xalan
        AssignedTo: xalan-dev@xml.apache.org
        ReportedBy: abhilash.koneri@bestbuy.com
                CC: abhilash.koneri@bestbuy.com


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:output 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. Is this a bug?