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 CompiledStylesheet s;
\r
46 XmlResolver xmlResolver = new XmlUrlResolver ();
\r
48 [MonoTODO] // FIXME: audit security check
\r
51 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
53 public XmlResolver XmlResolver {
\r
55 xmlResolver = value;
\r
62 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
64 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args)
\r
66 return Transform (input.CreateNavigator (), args, xmlResolver);
\r
70 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
\r
72 XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
\r
75 return Transform (input.CreateNavigator (), args, resolver);
\r
80 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
82 public XmlReader Transform (XPathNavigator input, XsltArgumentList args)
\r
84 return Transform (input, args, xmlResolver);
\r
87 public XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
\r
89 XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
\r
92 // todo: is this right?
\r
93 MemoryStream stream = new MemoryStream ();
\r
94 Transform (input, args, new XmlTextWriter (stream, null), resolver);
\r
95 stream.Position = 0;
\r
96 return new XmlTextReader (stream, XmlNodeType.Element, null);
\r
101 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
103 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output)
\r
105 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
108 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
110 void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
113 Transform (input.CreateNavigator (), args, output, resolver);
\r
118 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
120 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output)
\r
122 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
125 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
127 void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
130 Transform (input.CreateNavigator (), args, output, resolver);
\r
135 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
137 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output)
\r
139 Transform (input.CreateNavigator (), args, output, xmlResolver);
\r
142 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
144 void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
147 Transform (input.CreateNavigator (), args, output, resolver);
\r
152 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
154 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output)
\r
156 Transform (input, args, output, xmlResolver);
\r
159 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
161 void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
\r
165 throw new XsltException ("No stylesheet was loaded.", null);
\r
167 Outputter outputter = new GenericOutputter (output, s.Outputs, null);
\r
168 new XslTransformProcessor (s).Process (input, outputter, args, resolver);
\r
174 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
176 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output)
\r
178 Transform (input, args, output, xmlResolver);
\r
181 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
183 void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
\r
186 XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];
\r
187 Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);
\r
192 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
194 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output)
\r
196 Transform (input, args, output, xmlResolver);
\r
199 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
201 void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
\r
205 throw new XsltException ("No stylesheet was loaded.", null);
\r
207 Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);
\r
208 new XslTransformProcessor (s).Process (input, outputter, args, resolver);
\r
215 [Obsolete ("You should pass XmlResolver to Transform() method", false)]
\r
217 public void Transform (string inputfile, string outputfile)
\r
219 Transform (inputfile, outputfile, xmlResolver);
\r
223 public void Transform (string inputfile, string outputfile, XmlResolver resolver)
\r
225 void Transform (string inputfile, string outputfile, XmlResolver resolver)
\r
228 using (Stream s = new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {
\r
229 Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);
\r
235 public void Load (string url)
\r
240 public void Load (string url, XmlResolver resolver)
\r
242 XmlResolver res = resolver;
\r
244 res = new XmlUrlResolver ();
\r
245 Uri uri = res.ResolveUri (null, url);
\r
246 using (Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream) {
\r
247 XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);
\r
248 xtr.XmlResolver = res;
\r
249 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
\r
250 xvr.XmlResolver = res;
\r
251 xvr.ValidationType = ValidationType.None;
\r
252 Load (new XPathDocument (xvr, XmlSpace.Preserve).CreateNavigator (), resolver, null);
\r
258 [Obsolete("You should pass evidence.", false)]
\r
260 public void Load (XmlReader stylesheet)
\r
262 Load (stylesheet, null, null);
\r
267 [Obsolete("You should pass evidence.", false)]
\r
269 public void Load (XmlReader stylesheet, XmlResolver resolver)
\r
271 Load (stylesheet, resolver, null);
\r
276 [Obsolete("You should pass evidence.", false)]
\r
278 public void Load (XPathNavigator stylesheet)
\r
280 Load (stylesheet, null, null);
\r
285 [Obsolete("You should pass evidence.", false)]
\r
287 public void Load (XPathNavigator stylesheet, XmlResolver resolver)
\r
289 Load (stylesheet, resolver, null);
\r
294 [Obsolete("You should pass evidence.", false)]
\r
296 public void Load (IXPathNavigable stylesheet)
\r
298 Load (stylesheet.CreateNavigator(), null);
\r
303 [Obsolete("You should pass evidence.", false)]
\r
305 public void Load (IXPathNavigable stylesheet, XmlResolver resolver)
\r
307 Load (stylesheet.CreateNavigator(), resolver);
\r
310 // Introduced in .NET 1.1
\r
312 public void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)
\r
314 internal void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)
\r
317 Load (stylesheet.CreateNavigator(), resolver, evidence);
\r
321 public void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)
\r
323 internal void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)
\r
326 s = new Compiler ().Compile (stylesheet, resolver, evidence);
\r
330 public void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)
\r
332 internal void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)
\r
335 Load (new XPathDocument (stylesheet, XmlSpace.Preserve).CreateNavigator (), resolver, evidence);
\r