1 // System.Xml.Xsl.XslTransform
\r
4 // Tim Coleman <tim@timcoleman.com>
\r
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
\r
7 // (C) Copyright 2002 Tim Coleman
\r
8 // (c) 2003 Ximian Inc. (http://www.ximian.com)
\r
12 // Permission is hereby granted, free of charge, to any person obtaining
\r
13 // a copy of this software and associated documentation files (the
\r
14 // "Software"), to deal in the Software without restriction, including
\r
15 // without limitation the rights to use, copy, modify, merge, publish,
\r
16 // distribute, sublicense, and/or sell copies of the Software, and to
\r
17 // permit persons to whom the Software is furnished to do so, subject to
\r
18 // the following conditions:
\r
20 // The above copyright notice and this permission notice shall be
\r
21 // included in all copies or substantial portions of the Software.
\r
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
33 using System.Collections;
\r
36 using System.Runtime.InteropServices;
\r
37 using System.Security;
\r
38 using System.Security.Policy;
\r
39 using System.Xml.XPath;
\r
42 namespace System.Xml.Xsl {
\r
43 public sealed class XslTransform {
\r
45 internal static readonly bool TemplateStackFrameError;
\r
46 internal static readonly TextWriter TemplateStackFrameOutput;
\r
48 static XslTransform ()
\r
50 string env = Environment.GetEnvironmentVariable ("MONO_XSLT_STACK_FRAME");
\r
53 TemplateStackFrameOutput = Console.Out;
\r
56 TemplateStackFrameOutput = Console.Error;
\r
59 TemplateStackFrameError = true;
\r
64 CompiledStylesheet s;
\r
65 XmlResolver xmlResolver = new XmlUrlResolver ();
\r
67 [MonoTODO] // FIXME: audit security check
\r
70 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
72 public XmlResolver XmlResolver {
\r
74 xmlResolver = value;
\r
81 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
83 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args)
\r
85 return Transform (input.CreateNavigator (), args, xmlResolver);
\r
89 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
\r
91 XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
\r
94 return Transform (input.CreateNavigator (), args, resolver);
\r
99 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
101 public XmlReader Transform (XPathNavigator input, XsltArgumentList args)
\r
103 return Transform (input, args, xmlResolver);
\r
106 public XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
\r
108 XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
\r
111 // todo: is this right?
\r
112 MemoryStream stream = new MemoryStream ();
\r
113 Transform (input, args, new XmlTextWriter (stream, null), resolver);
\r
114 stream.Position = 0;
\r
115 return new XmlTextReader (stream, XmlNodeType.Element, null);
\r
120 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
122 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output)
\r
124 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
127 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
129 void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
132 Transform (input.CreateNavigator (), args, output, resolver);
\r
137 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
139 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output)
\r
141 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
144 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
146 void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
149 Transform (input.CreateNavigator (), args, output, resolver);
\r
154 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
156 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output)
\r
158 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
161 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
163 void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
166 Transform (input.CreateNavigator (), args, output, resolver);
\r
171 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
173 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output)
\r
175 Transform (input, args, output, xmlResolver);
\r
178 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
180 void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
184 throw new XsltException ("No stylesheet was loaded.", null);
\r
186 Outputter outputter = new GenericOutputter (output, s.Outputs, null);
\r
187 new XslTransformProcessor (s).Process (input, outputter, args, resolver);
\r
193 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
195 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output)
\r
197 Transform (input, args, output, xmlResolver);
\r
200 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
202 void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
205 XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];
\r
206 Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);
\r
211 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
213 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output)
\r
215 Transform (input, args, output, xmlResolver);
\r
218 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
220 void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
224 throw new XsltException ("No stylesheet was loaded.", null);
\r
226 Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);
\r
227 new XslTransformProcessor (s).Process (input, outputter, args, resolver);
\r
234 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
236 public void Transform (string inputfile, string outputfile)
\r
238 Transform (inputfile, outputfile, xmlResolver);
\r
242 public void Transform (string inputfile, string outputfile, XmlResolver resolver)
\r
244 void Transform (string inputfile, string outputfile, XmlResolver resolver)
\r
247 using (Stream s = new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {
\r
248 Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);
\r
254 public void Load (string url)
\r
259 public void Load (string url, XmlResolver resolver)
\r
261 XmlResolver res = resolver;
\r
263 res = new XmlUrlResolver ();
\r
264 Uri uri = res.ResolveUri (null, url);
\r
265 using (Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream) {
\r
266 XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);
\r
267 xtr.XmlResolver = res;
\r
268 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
\r
269 xvr.XmlResolver = res;
\r
270 xvr.ValidationType = ValidationType.None;
\r
271 Load (new XPathDocument (xvr, XmlSpace.Preserve).CreateNavigator (), resolver, null);
\r
277 [Obsolete("You should pass evidence.", false)]
\r
279 public void Load (XmlReader stylesheet)
\r
281 Load (stylesheet, null, null);
\r
286 [Obsolete("You should pass evidence.", false)]
\r
288 public void Load (XmlReader stylesheet, XmlResolver resolver)
\r
290 Load (stylesheet, resolver, null);
\r
295 [Obsolete("You should pass evidence.", false)]
\r
297 public void Load (XPathNavigator stylesheet)
\r
299 Load (stylesheet, null, null);
\r
304 [Obsolete("You should pass evidence.", false)]
\r
306 public void Load (XPathNavigator stylesheet, XmlResolver resolver)
\r
308 Load (stylesheet, resolver, null);
\r
313 [Obsolete("You should pass evidence.", false)]
\r
315 public void Load (IXPathNavigable stylesheet)
\r
317 Load (stylesheet.CreateNavigator(), null);
\r
322 [Obsolete("You should pass evidence.", false)]
\r
324 public void Load (IXPathNavigable stylesheet, XmlResolver resolver)
\r
326 Load (stylesheet.CreateNavigator(), resolver);
\r
329 // Introduced in .NET 1.1
\r
331 public void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)
\r
333 internal void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)
\r
336 Load (stylesheet.CreateNavigator(), resolver, evidence);
\r
340 public void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)
\r
342 internal void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)
\r
345 s = new Compiler ().Compile (stylesheet, resolver, evidence);
\r
349 public void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)
\r
351 internal void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)
\r
354 Load (new XPathDocument (stylesheet, XmlSpace.Preserve).CreateNavigator (), resolver, evidence);
\r