From: <bo...@us...> - 2009-05-11 09:51:00
|
Revision: 314 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=314&view=rev Author: bodewig Date: 2009-05-11 09:50:51 +0000 (Mon, 11 May 2009) Log Message: ----------- input by XSLT transforming another input Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java trunk/xmlunit/src/main/net-core/builder/Input.cs Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java 2009-05-11 09:25:11 UTC (rev 313) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java 2009-05-11 09:50:51 UTC (rev 314) @@ -22,6 +22,9 @@ import java.net.URI; import java.net.URL; import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; @@ -115,4 +118,43 @@ public static Builder fromURI(String uri) throws Exception { return fromURI(new URI(uri)); } + + public static interface TransformationBuilder { + Builder withStylesheet(Source s); + } + + private static class TransformationStep1 implements TransformationBuilder { + private Source sourceDoc; + private TransformationStep1(Source s) { + sourceDoc = s; + } + public Builder withStylesheet(Source s) { + return new TransformationStep2(sourceDoc, s); + } + } + + private static class TransformationStep2 implements Builder { + private Source source; + private Source styleSheet; + private TransformationStep2(Source source, Source styleSheet) { + this.source = source; + this.styleSheet = styleSheet; + } + + public Source build() { + try { + DOMResult r = new DOMResult(); + Transformer t = TransformerFactory.newInstance() + .newTransformer(styleSheet); + t.transform(source, r); + return new DOMSource(r.getNode()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + public static TransformationBuilder byTransforming(Source s) { + return new TransformationStep1(s); + } } Modified: trunk/xmlunit/src/main/net-core/builder/Input.cs =================================================================== --- trunk/xmlunit/src/main/net-core/builder/Input.cs 2009-05-11 09:25:11 UTC (rev 313) +++ trunk/xmlunit/src/main/net-core/builder/Input.cs 2009-05-11 09:50:51 UTC (rev 314) @@ -13,6 +13,7 @@ */ using System.IO; using System.Xml; +using System.Xml.Xsl; using net.sf.xmlunit.input; namespace net.sf.xmlunit.builder { @@ -79,5 +80,43 @@ return new StreamBuilder(uri.AbsoluteUri); } + public interface ITransformationBuilder { + IBuilder WithStylesheet(ISource s); + } + + internal class TransformationStep1 : ITransformationBuilder { + private ISource sourceDoc; + internal TransformationStep1(ISource s) { + sourceDoc = s; + } + public IBuilder WithStylesheet(ISource s) { + return new TransformationStep2(sourceDoc, s); + } + } + + internal class TransformationStep2 : IBuilder { + private ISource source; + private ISource styleSheet; + internal TransformationStep2(ISource source, ISource styleSheet) { + this.source = source; + this.styleSheet = styleSheet; + } + + public ISource Build() { + XslCompiledTransform t = new XslCompiledTransform(); + t.Load(styleSheet.Reader); + MemoryStream ms = new MemoryStream(); + using (ms) { + t.Transform(source.Reader, + new XsltArgumentList(), + ms); + } + return FromMemory(ms.ToArray()).Build(); + } + } + + public static ITransformationBuilder ByTransforming(ISource s) { + return new TransformationStep1(s); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |