ManagedXslTransform.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // ManagedXslTransform
  3. //
  4. // Authors:
  5. // Ben Maurer ([email protected])
  6. //
  7. // (C) 2003 Ben Maurer
  8. //
  9. using System;
  10. using System.Collections;
  11. using System.IO;
  12. using System.Security.Policy;
  13. using System.Text;
  14. using System.Xml.XPath;
  15. using Mono.Xml.Xsl;
  16. namespace System.Xml.Xsl {
  17. internal class ManagedXslTransform : XslTransformImpl {
  18. CompiledStylesheet s;
  19. public override void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)
  20. {
  21. s = new Compiler ().Compile (stylesheet, resolver, evidence);
  22. }
  23. public override void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
  24. {
  25. if (s == null)
  26. throw new XsltException ("No stylesheet was loaded.", null);
  27. Outputter outputter = new GenericOutputter (output, s.Outputs, null);
  28. new XslTransformProcessor (s).Process (input, outputter, args, resolver);
  29. output.Flush ();
  30. }
  31. public override void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver) {
  32. Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);
  33. // outputter.WriteStartDocument();
  34. new XslTransformProcessor (s).Process (input, outputter, args, resolver);
  35. switch (outputter.WriteState) {
  36. case WriteState.Start:
  37. case WriteState.Closed:
  38. break;
  39. default:
  40. outputter.WriteEndDocument();
  41. break;
  42. }
  43. output.Flush ();
  44. }
  45. public override void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
  46. {
  47. XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];
  48. Transform (input, args, new XmlTextWriter (output, xslOutput.Encoding), resolver);
  49. }
  50. }
  51. }