/// <summary> /// Opens the WKT file and loads all the data into the reader's nodes /// </summary> /// <param name="filename">The name of the WKT file to load</param> public void Read(string filename) { if (!System.IO.File.Exists(filename)) { throw new Exception("WKT File does not exist"); } LevelList = new ArrayList(); mvarNodes = new WKTNodes(); try { string inData = System.IO.File.ReadAllText(filename); // Remove unwanted characters inData = inData.Replace("\t", ""); inData = inData.Replace("\n", ""); inData = inData.Replace("\r", ""); inData = inData.Replace(", ", ","); int majLevel = 0; while (inData != "") { int brkPos = inData.IndexOf("["); if (brkPos == -1) { return; } string valName = (inData.Substring(0, brkPos)).Trim(); if (valName.Contains(",")) { valName = valName.Substring(valName.IndexOf(",") + 1); } string innerText = LoadParameterFromWKT(valName, inData); string param = null; inData = (inData.Substring(brkPos + 2 + innerText.Length)).Trim(); if (innerText.Contains("[")) { brkPos = innerText.IndexOf("["); brkPos = innerText.LastIndexOf(",", brkPos); param = (innerText.Substring(0, brkPos)).Trim(); } else { param = innerText; } majLevel++; mvarNodes.Add("Top", valName, innerText, param, ""); } FindAllLevels(); } catch { } }
/// <summary> /// Returns all the nodes in the WKT string that match /// </summary> /// <param name="TagName">"The name of the Tag (e.g. DATUM)</param> public WKTNodes GetNodesbyName(string TagName) { WKTNodes getNodes = new WKTNodes(); // Iterate through all the nodes and their children to find the match foreach (string testLevel in LevelList) { string[] splitLevels = testLevel.Split('.'); WKTNode retNode = mvarNodes[Convert.ToInt32(splitLevels[0])]; for (int i = 1; i < splitLevels.Length - 1; i++) { retNode = retNode.Children[Convert.ToInt32(splitLevels[i])]; } if (retNode.TagName.ToUpper() == TagName.ToUpper()) { getNodes.Add(retNode); } } return(getNodes); }
internal void Add(string Parent, string Name, string InnerText, string Parameters, string Level) { //create a new object string[] paramList; WKTNode objNewMember = default(WKTNode); objNewMember = new WKTNode(); WKTNodes Kids = new WKTNodes(); sLevel = Level; Counter++; //set the properties passed into the method objNewMember.TagName = Name.Replace("\"", ""); objNewMember.InnerText = InnerText; objNewMember.ParentName = Parent; objNewMember.Children = Kids; //if (Parent == "Top") //{ objNewMember.Level = Level; } //else objNewMember.Level = Level + "." + Counter.ToString(); if (Parameters != null) { paramList = Parameters.Split(','); if (paramList[0].StartsWith("\"")) { objNewMember.AttributeName = paramList[0].Replace("\"", ""); } else { objNewMember.Attributes.Add(paramList[0].Trim()); } for (int i = 1; i < paramList.Length; i++) { // TO DO: Because the paramList is an ArrayList there is no reason why everything has to be // Stored as a string. objNewMember.Attributes.Add(paramList[i].Replace("\"", "").Trim()); } } List.Add(objNewMember); while (InnerText != null) { int brkPos = InnerText.IndexOf("["); string valName = null; string subText = null; string param = null; if (brkPos > -1) { valName = (InnerText.Substring(0, brkPos)).Trim(); if (valName.Contains(",")) { valName = (valName.Substring(valName.LastIndexOf(",") + 1)).Trim(); } subText = LoadParameterFromWKT(valName, InnerText); InnerText = (InnerText.Substring(brkPos + 2 + subText.Length)).Trim(); if (InnerText.StartsWith(",")) { InnerText = InnerText.Substring(1); } InnerText = InnerText.Trim(); if (subText.Contains("[")) { brkPos = subText.IndexOf("["); brkPos = subText.LastIndexOf(",", brkPos); param = subText.Substring(0, brkPos).Trim(); } else { param = subText; subText = null; } } else { param = InnerText; InnerText = null; } if (InnerText == "") { InnerText = null; } objNewMember = (WKTNode)List[List.Count - 1]; objNewMember.hasChildren = true; objNewMember.Children.Add(objNewMember.TagName, valName, subText, param, objNewMember.Level); } }