public void parseRefdata(string refDataFilePath) { //need to parse this way to avoid tabs in the script code to be changed into spaces (normalization rules) var reader = new XmlTextReader(new FileStream(refDataFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); // parse file into XDocument this.xDoc = XDocument.Load(reader); var scriptNodes = new List <XElement>(); //loop DataRow elements foreach (var dataRow in xDoc.Descendants("DataRow")) { var category = dataRow.Elements("Column") .SingleOrDefault(e => e.Attribute("name").Value == "ScriptCategory") .Attribute("value").Value; //figure out if this is script, Group or ScriptDebugging if (category == "3955A83E-9E54-4810-8053-FACC68CD4782") { //Process Group //get group name var groupName = dataRow.Elements("Column") .SingleOrDefault(e => e.Attribute("name").Value == "Script") .Attribute("value").Value; //get group id var groupID = dataRow.Elements("Column") .SingleOrDefault(e => e.Attribute("name").Value == "ScriptName") .Attribute("value").Value; //create group var group = new ScriptGroup(groupName, groupID, dataRow); //add group to dictionary this.scriptGroups.Add(groupID, group); } else if (category == "605A62F7-BCD0-4845-A8D0-7DC45B4D2E3F") { //Script scriptNodes.Add(dataRow); } } //after all groups have been processed, process scripts foreach (var scriptNode in scriptNodes) { //get scriptname var scriptNameField = scriptNode.Elements("Column") .SingleOrDefault(e => e.Attribute("name").Value == "Notes") .Attribute("value").Value; //parse out script name. Should be between <Script Name="ScriptName" Type="Internal" Language="VBScript"/> var start = "<Script Name= ".Length; var end = scriptNameField.IndexOf('"', start); var scriptName = scriptNameField.Substring(start, end - start); Script script; //get groupID var groupID = scriptNode.Elements("Column") .SingleOrDefault(e => e.Attribute("name").Value == "ScriptAuthor") .Attribute("value").Value; if (this.scriptGroups.TryGetValue(groupID, out var scriptGroup)) { script = new Script(scriptName, scriptGroup, scriptNode, this.settings); } else { script = new Script(scriptName, groupID, scriptNode, this.settings); this.individualScripts.Add(script); } this.scripts.Add(script); } // get the includable scripts getIncludableScripts(); //get the script dependencies foreach (var script in this.scripts) { this.getScriptDependencies(script); } }
public Script(string scriptName, ScriptGroup scriptGroup, XElement xElement, SplitterSettings settings) : this(scriptName, scriptGroup.id, xElement, settings) { this.group = scriptGroup; this.group.scripts.Add(this); }