In tests/attributes:
[mono.git] / mcs / class / System.XML / System.Xml.Xsl / XslTransform.cs
1 // System.Xml.Xsl.XslTransform\r
2 //\r
3 // Authors:\r
4 //      Tim Coleman <tim@timcoleman.com>\r
5 //      Gonzalo Paniagua Javier (gonzalo@ximian.com)\r
6 //\r
7 // (C) Copyright 2002 Tim Coleman\r
8 // (c) 2003 Ximian Inc. (http://www.ximian.com)\r
9 //\r
10
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31 \r
32 using System;\r
33 using System.Collections;\r
34 using System.IO;\r
35 using System.Text;\r
36 using System.Runtime.InteropServices;\r
37 using System.Security;\r
38 using System.Security.Policy;\r
39 using System.Xml.XPath;\r
40 using Mono.Xml.Xsl;
41 \r
42 namespace System.Xml.Xsl {\r
43         public sealed class XslTransform {\r
44
45                 CompiledStylesheet s;\r
46                 XmlResolver xmlResolver = new XmlUrlResolver ();\r
47 \r
48                 [MonoTODO ("Security check.")]\r
49 #if NET_1_1\r
50                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
51 #endif\r
52                 public XmlResolver XmlResolver {\r
53                         set {\r
54                                  xmlResolver = value;\r
55                         }\r
56                 }\r
57                 \r
58                 #region Transform\r
59 #if NET_1_1\r
60                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
61 #endif\r
62                 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args)\r
63                 {\r
64                         return Transform (input.CreateNavigator (), args, xmlResolver);\r
65                 }\r
66 \r
67 #if NET_1_1\r
68                 public XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)\r
69 #else\r
70                 XmlReader Transform (IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)\r
71 #endif\r
72                 {\r
73                         return Transform (input.CreateNavigator (), args, resolver);\r
74                 }\r
75 \r
76 #if NET_1_1\r
77                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
78 #endif\r
79                 public XmlReader Transform (XPathNavigator input, XsltArgumentList args)\r
80                 {\r
81                         return Transform (input, args, xmlResolver);\r
82                 }\r
83 #if NET_1_1\r
84                 public XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)\r
85 #else\r
86                 XmlReader Transform (XPathNavigator input, XsltArgumentList args, XmlResolver resolver)\r
87 #endif\r
88                 {\r
89                         // todo: is this right?\r
90                         MemoryStream stream = new MemoryStream ();\r
91                         Transform (input, args, new XmlTextWriter (stream, null), resolver);\r
92                         stream.Position = 0;\r
93                         return new XmlTextReader (stream);\r
94                 }\r
95 \r
96 #if NET_1_1\r
97                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
98 #endif\r
99                 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output)\r
100                 {\r
101                         Transform (input.CreateNavigator (), args, output, xmlResolver);\r
102                 }\r
103 #if NET_1_1\r
104                 public void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
105 #else\r
106                 void Transform (IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
107 #endif\r
108                 {\r
109                         Transform (input.CreateNavigator (), args, output, resolver);\r
110                 }\r
111                 \r
112 #if NET_1_1\r
113                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
114 #endif\r
115                 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output)\r
116                 {\r
117                         Transform (input.CreateNavigator (), args, output, xmlResolver);\r
118                 }\r
119 #if NET_1_1\r
120                 public void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
121 #else\r
122                 void Transform (IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
123 #endif\r
124                 {\r
125                         Transform (input.CreateNavigator (), args, output, resolver);\r
126                 }\r
127                 \r
128 #if NET_1_1\r
129                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
130 #endif\r
131                 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output)\r
132                 {\r
133                         Transform (input.CreateNavigator (), args, output, xmlResolver);\r
134                 }\r
135 #if NET_1_1\r
136                 public void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
137 #else\r
138                 void Transform (IXPathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
139 #endif\r
140                 {\r
141                         Transform (input.CreateNavigator (), args, output, resolver);\r
142                 }\r
143 \r
144 #if NET_1_1\r
145                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
146 #endif\r
147                 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output)\r
148                 {\r
149                         Transform (input, args, output, xmlResolver);\r
150                 }\r
151 #if NET_1_1\r
152                 public void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
153 #else\r
154                 void Transform (XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)\r
155 #endif\r
156                 {\r
157                         if (s == null)
158                                 throw new XsltException ("No stylesheet was loaded.", null);
159
160                         Outputter outputter = new GenericOutputter (output, s.Outputs, null);
161                         new XslTransformProcessor (s).Process (input, outputter, args, resolver);
162                         output.Flush ();\r
163                 }\r
164 \r
165 #if NET_1_1\r
166                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
167 #endif\r
168                 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output)\r
169                 {\r
170                         Transform (input, args, output, xmlResolver);           \r
171                 }\r
172 #if NET_1_1\r
173                 public void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
174 #else\r
175                 void Transform (XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)\r
176 #endif\r
177                 {\r
178                         XslOutput xslOutput = (XslOutput)s.Outputs[String.Empty];
179                         Transform (input, args, new StreamWriter (output, xslOutput.Encoding), resolver);\r
180                 }\r
181 \r
182 #if NET_1_1\r
183                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
184 #endif\r
185                 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output)\r
186                 {\r
187                         Transform (input, args, output, xmlResolver);\r
188                 }\r
189 #if NET_1_1\r
190                 public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
191 #else\r
192                 void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)\r
193 #endif\r
194                 {\r
195                         Outputter outputter = new GenericOutputter(output, s.Outputs, output.Encoding);                 
196                         new XslTransformProcessor (s).Process (input, outputter, args, resolver);
197                         outputter.Done ();
198                         output.Flush ();\r
199                 }\r
200                 \r
201 #if NET_1_1\r
202                 [Obsolete ("You should pass XmlResolver to Transform() method", false)]\r
203 #endif\r
204                 public void Transform (string inputfile, string outputfile)\r
205                 { \r
206                         Transform (inputfile, outputfile, xmlResolver);\r
207                 }\r
208 \r
209 #if NET_1_1\r
210                 public void Transform (string inputfile, string outputfile, XmlResolver resolver)\r
211 #else\r
212                 void Transform (string inputfile, string outputfile, XmlResolver resolver)\r
213 #endif\r
214                 {\r
215                         using (Stream s = new FileStream (outputfile, FileMode.Create, FileAccess.ReadWrite)) {
216                                 Transform(new XPathDocument (inputfile).CreateNavigator (), null, s, resolver);
217                         }\r
218                 }\r
219                 #endregion\r
220 \r
221                 #region Load\r
222                 public void Load (string url)\r
223                 {\r
224                         Load (url, null);\r
225                 }\r
226                 \r
227                 public void Load (string url, XmlResolver resolver)\r
228                 {\r
229                         XmlResolver res = resolver;
230                         if (res == null)
231                                 res = new XmlUrlResolver ();
232                         Uri uri = res.ResolveUri (null, url);
233                         using (Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream) {
234                                 XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);
235                                 xtr.XmlResolver = res;
236                                 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
237                                 xvr.XmlResolver = res;
238                                 xvr.ValidationType = ValidationType.None;
239                                 Load (new XPathDocument (xvr, XmlSpace.Preserve).CreateNavigator (), resolver, null);
240                         }\r
241                 }\r
242 \r
243 #if NET_1_1\r
244                 [Obsolete("You should pass evidence.", false)]\r
245 #endif\r
246                 public void Load (XmlReader stylesheet)\r
247                 {\r
248                         Load (stylesheet, null, null);\r
249                 }\r
250 \r
251 #if NET_1_1\r
252                 [Obsolete("You should pass evidence.", false)]\r
253 #endif\r
254                 public void Load (XmlReader stylesheet, XmlResolver resolver)\r
255                 {\r
256                         Load (stylesheet, resolver, null);\r
257                 }\r
258 \r
259 #if NET_1_1\r
260                 [Obsolete("You should pass evidence.", false)]\r
261 #endif\r
262                 public void Load (XPathNavigator stylesheet)\r
263                 {\r
264                         Load (stylesheet, null, null);\r
265                 }\r
266 \r
267 #if NET_1_1\r
268                 [Obsolete("You should pass evidence.", false)]\r
269 #endif\r
270                 public void Load (XPathNavigator stylesheet, XmlResolver resolver)\r
271                 {\r
272                         Load (stylesheet, resolver, null);\r
273                 }\r
274                 \r
275 #if NET_1_1\r
276                 [Obsolete("You should pass evidence.", false)]\r
277 #endif\r
278                 public void Load (IXPathNavigable stylesheet)\r
279                 {\r
280                         Load (stylesheet.CreateNavigator(), null);\r
281                 }\r
282 \r
283 #if NET_1_1\r
284                 [Obsolete("You should pass evidence.", false)]\r
285 #endif\r
286                 public void Load (IXPathNavigable stylesheet, XmlResolver resolver)\r
287                 {\r
288                         Load (stylesheet.CreateNavigator(), resolver);\r
289                 }\r
290 \r
291                 // Introduced in .NET 1.1\r
292 #if NET_1_1\r
293                 public void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)\r
294 #else\r
295                 internal void Load (IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence)\r
296 #endif\r
297                 {\r
298                         Load (stylesheet.CreateNavigator(), resolver, evidence);\r
299                 }\r
300 \r
301 #if NET_1_1\r
302                 public void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)\r
303 #else\r
304                 internal void Load (XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence)\r
305 #endif\r
306                 {\r
307                         s = new Compiler ().Compile (stylesheet, resolver, evidence);\r
308                 }\r
309 \r
310 #if NET_1_1\r
311                 public void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)\r
312 #else\r
313                 internal void Load (XmlReader stylesheet, XmlResolver resolver, Evidence evidence)\r
314 #endif\r
315                 {\r
316                         Load (new XPathDocument (stylesheet, XmlSpace.Preserve).CreateNavigator (), resolver, evidence);\r
317                 }\r
318                 #endregion\r
319         }\r
320 }\r