private SisulizerProject AddProject(string projectName) { var sisulizerProject = new SisulizerProject(this, projectName); this.projects.Add(sisulizerProject); return(sisulizerProject); }
private void ParseStream(Stream fileStream) { using (var xr = XmlReader.Create(fileStream)) { SisulizerProject sisulizerProject = null; var mostRecentNativeText = string.Empty; var mostRecentLanguage = string.Empty; var mostRecentStatus = LangStatus.Undefined; var mostRecentIsValid = false; var sisulizerNodeType = SisulizerNodeType.Undefined; // we are forward-only, so we need to store what we encounter and only act on it when the end-element is reached while (xr.Read()) { switch (xr.NodeType) { case XmlNodeType.Element: switch (xr.Name) { case "source": var projectName = xr.GetAttribute("name"); if (this.options.Verbose) { Console.WriteLine("Encountered new project " + projectName); } sisulizerProject = this.AddProject(projectName); break; case "node": if (xr.GetAttribute("excluded") == "1") { xr.ReadInnerXml(); // we don't need the inner xml, we just want to skip over it and move the reader forward } break; case "row": if (SkipRow(xr.GetAttribute("id")) || xr.GetAttribute("hidden") == "1") { xr.ReadInnerXml(); // we don't need the inner xml, we just want to skip over it and move the reader forward } else { ////foo.Add(xr.GetAttribute("id")); sisulizerNodeType = SisulizerNodeType.Row; } break; case "native": sisulizerNodeType = SisulizerNodeType.Native; break; case "lang": sisulizerNodeType = SisulizerNodeType.Lang; mostRecentLanguage = xr.GetAttribute("id"); mostRecentStatus = GetStatusFromInt(xr.GetAttribute("status")); mostRecentIsValid = xr.GetAttribute("invalidated") != "1"; break; default: sisulizerNodeType = SisulizerNodeType.Undefined; break; } break; case XmlNodeType.Text: switch (sisulizerNodeType) { case SisulizerNodeType.Row: case SisulizerNodeType.Native: mostRecentNativeText = xr.Value; sisulizerProject?.IncNative(mostRecentNativeText, string.Empty); break; case SisulizerNodeType.Lang: var translatedText = xr.Value; sisulizerProject?.IncLanguage(mostRecentLanguage, mostRecentStatus, mostRecentIsValid, mostRecentNativeText, translatedText); break; } break; case XmlNodeType.EndElement: { sisulizerNodeType = SisulizerNodeType.Undefined; break; } } } } ////var sb = new StringBuilder(); ////foreach (var text in foo.OrderBy(x => x)) ////{ //// sb.AppendLine(text); ////} ////File.WriteAllText("rowids.txt", sb.ToString()); }