public void Parse() { XmlNode node = Document.DocumentElement; KScriptContainer = new KScriptContainer(Properties, this); KScriptContainer.LoadBuiltInTypes(); KScriptContainer.LoadBuiltInParserHandlers(); KScriptContainer.LoadBuiltInOperatorHandlers(); KScriptContainer.LoadBuiltInVariableFunctionTypes(); KScriptDocument = new Document.KScriptDocument(); KScriptObject rootElement = GetScriptObject(node, KScriptContainer); KScriptContainer.FilePath = FilePath; KScriptContainer.FileDirectory = Path.GetDirectoryName(FilePath); PrepareProperties(rootElement, node, KScriptContainer); RootElements = new KScriptDocumentCollectionNode(rootElement); Iterate(node, KScriptDocument, KScriptContainer, RootElements); KScriptDocument.AddChild(RootElements); KScriptDocument.Run(KScriptContainer); Complete(); }
private void Iterate(XmlNode node, Document.KScriptDocument doc, KScriptContainer container, KScriptDocumentCollectionNode docNode) { foreach (XmlNode item in node.ChildNodes) { if (!(item.NodeType != XmlNodeType.Comment || item.NodeType == XmlNodeType.Text)) { continue; } KScriptObject obj = GetScriptObject(item, container); if (obj == null) { continue; } if (!PrepareProperties(obj, item, container)) { continue; } IParserHandler parserHandler = GetParserInterface(obj); if (parserHandler != null) { KScriptDocumentNode collection = new KScriptDocumentNode(parserHandler.GenerateKScriptObject(obj, item)); docNode.Nodes.Add(collection); continue; } if (item.HasChildNodes) { KScriptDocumentCollectionNode withoutParserCollection = new KScriptDocumentCollectionNode(obj); Iterate(item, doc, container, withoutParserCollection); docNode.Nodes.Add(withoutParserCollection); continue; } docNode.Nodes.Add(new KScriptDocumentNode(obj)); continue; } }