2003-08-18 Ben Maurer <bmaurer@users.sourceforge.net>
[mono.git] / mcs / class / System.XML / Mono.Xml.Xsl.Operations / XslProcessingInstruction.cs
1 //
2 // XslProcessingInstruction.cs
3 //
4 // Authors:
5 //      Ben Maurer (bmaurer@users.sourceforge.net)
6 //      Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
7 //      
8 // (C) 2003 Ben Maurer
9 // (C) 2003 Atsushi Enomoto
10 //
11
12 using System;
13 using System.Collections;
14 using System.Xml;
15 using System.Xml.XPath;
16 using System.Xml.Xsl;
17 using System.IO;
18
19 namespace Mono.Xml.Xsl.Operations {
20         public class XslProcessingInstruction : XslCompiledElement {
21                 XslAvt name;
22                 XslOperation value;
23                 
24                 public XslProcessingInstruction (Compiler c) : base (c) {}
25                 
26                 protected override void Compile (Compiler c)
27                 {
28                         name = c.ParseAvtAttribute ("name");
29                         if (!c.Input.MoveToFirstChild ()) return;
30                         
31                         value = c.CompileTemplateContent ();
32                         c.Input.MoveToParent ();
33                 }
34
35                 public override void Evaluate (XslTransformProcessor p)
36                 {
37                         StringWriter s = new StringWriter ();
38                         //TODO: only text nodes allowed here, other nodes must be ignored along with any content,
39                         //so TextOutputter is not really suitable here
40                         Outputter outputter = new TextOutputter(s);
41                         p.PushOutput (outputter);
42                         value.Evaluate (p);
43                         p.PopOutput ();
44                         
45                         p.Out.WriteProcessingInstruction (name.Evaluate (p), s.ToString ());
46                 }
47         }
48 }