dbcee1de283cdb4185d64fa29e49a4a0f52272d5
[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                         XmlWriter w = new XmlTextWriter (s);
39                         
40                         p.PushOutput (w);
41                         value.Evaluate (p);
42                         p.PopOutput ();
43                         
44                         p.Out.WriteProcessingInstruction (name.Evaluate (p), s.ToString ());
45                 }
46         }
47 }