2 using System.Collections;
3 using System.Collections.Specialized;
4 using System.Threading;
8 namespace Commons.Xml.Nvdl
10 public class NvdlValidatingReader : XmlDefaultReader
12 NvdlDispatcher dispatcher;
14 public NvdlValidatingReader (XmlReader reader, NvdlRules rules)
15 : this (reader, rules, new XmlUrlResolver ())
19 public NvdlValidatingReader (XmlReader reader, NvdlRules rules, XmlResolver resolver)
20 : this (reader, rules, resolver, Nvdl.DefaultConfig)
24 public NvdlValidatingReader (XmlReader reader, NvdlRules rules,
25 XmlResolver resolver, NvdlConfig config)
28 dispatcher = new NvdlDispatcher (new SimpleRules (
29 new NvdlCompileContext (
30 rules, config, resolver)), this);
33 internal NvdlValidatingReader (XmlReader reader, SimpleRules rules)
36 dispatcher = new NvdlDispatcher (rules, this);
39 public event NvdlMessageEventHandler ActionStarted;
41 internal void OnMessage (ListDictionary messages)
45 string message = messages [Thread.CurrentThread.CurrentCulture.Name] as string;
47 message = messages [String.Empty] as string;
50 if (ActionStarted != null)
51 ActionStarted (this, new NvdlMessageEventArgs (message));
56 public override bool Read ()
60 switch (Reader.NodeType) {
61 case XmlNodeType.Element:
62 dispatcher.StartElement ();
64 case XmlNodeType.EndElement:
65 dispatcher.EndElement ();
67 case XmlNodeType.Text:
68 case XmlNodeType.CDATA:
69 case XmlNodeType.SignificantWhitespace:
72 case XmlNodeType.Whitespace:
73 dispatcher.Whitespace ();