////////////////////////////////////////////////////////////////////////// /// <summary> /// Parse the script file. /// </summary> /// <param name="filename">Script file to parse.</param> /// <returns>The XmlNode of the script.</returns> ////////////////////////////////////////////////////////////////////////// public static XmlNode ParseXmlFile(string filename) { XmlNode rootNode = null; XmlNode currentNode = null; Stack <XmlNode> nodes = new Stack <XmlNode>(); // Reader of xml node XmlTextReader xmlReader = new XmlTextReader(filename); // Read to end of file while (!xmlReader.EOF) { // Consume node xmlReader.Read(); switch (xmlReader.NodeType) { // ==> Node content case XmlNodeType.Element: // Create a new node with parsing information currentNode = new XmlNode(xmlReader.LocalName.ToLower(), xmlReader.Value, xmlReader.LineNumber); // First node read : initialize root if (nodes.Count == 0) { rootNode = currentNode; nodes.Push(rootNode); } else { // Add current node to its parent XmlNode parent = nodes.Peek(); parent.Add(currentNode); // Don't push empty nodes onto the stack if (!xmlReader.IsEmptyElement) { nodes.Push(currentNode); } } // Add attribute to current node if (xmlReader.HasAttributes) { while (xmlReader.MoveToNextAttribute()) { currentNode.Add(xmlReader.Name, xmlReader.Value); } } break; // ==> End tag case XmlNodeType.EndElement: // Pop the top node nodes.Pop(); break; // Other tags default: // Ignored break; } } // Update root node rootNode.Add("file", filename); return(rootNode); }
////////////////////////////////////////////////////////////////////////// /// <summary> /// Parse the script file. /// </summary> /// <param name="filename">Script file to parse.</param> /// <returns>The XmlNode of the script.</returns> ////////////////////////////////////////////////////////////////////////// public static XmlNode ParseXmlFile(string filename) { XmlNode rootNode = null; XmlNode currentNode = null; Stack<XmlNode> nodes = new Stack<XmlNode>(); // Reader of xml node XmlTextReader xmlReader = new XmlTextReader(filename); // Read to end of file while (!xmlReader.EOF) { // Consume node xmlReader.Read(); switch (xmlReader.NodeType) { // ==> Node content case XmlNodeType.Element: // Create a new node with parsing information currentNode = new XmlNode(xmlReader.LocalName.ToLower(), xmlReader.Value, xmlReader.LineNumber); // First node read : initialize root if (nodes.Count == 0) { rootNode = currentNode; nodes.Push(rootNode); } else { // Add current node to its parent XmlNode parent = nodes.Peek(); parent.Add(currentNode); // Don't push empty nodes onto the stack if (!xmlReader.IsEmptyElement) nodes.Push(currentNode); } // Add attribute to current node if (xmlReader.HasAttributes) { while (xmlReader.MoveToNextAttribute()) { currentNode.Add(xmlReader.Name, xmlReader.Value); } } break; // ==> End tag case XmlNodeType.EndElement: // Pop the top node nodes.Pop(); break; // Other tags default: // Ignored break; } } // Update root node rootNode.Add("file", filename); return rootNode; }