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?