protected virtual IEnumerable <T> GetPages <T>(string pageElementName, string id, Func <XElement, IEnumerable <Stage>, IEnumerable <PageStage>, T> create) where T : PageBasedStage { var root = RootXML.Elements().ToList(); var res = new List <T>(); var pages = RootXML.Elements() .Where(i => i.Name.LocalName == "contents").Elements() .Where(i => i.Name.LocalName == pageElementName).ToList(); foreach (var page in pages) { var extractors = new StageExtractor(page, id); extractors.Load(); res.Add(create(page, extractors.Stages, GetPages(page))); } return(res); }
protected virtual IEnumerable <PageStage> GetPages(XElement obj) { var res = new List <PageStage>(); var elements = obj.Elements().Where(i => i.Name.LocalName == "process").Elements().ToList(); var subsheets = elements.Where(i => i.Name.LocalName == "subsheet").ToList(); foreach (var sheet in subsheets) { var stageExtractor = new StageExtractor(obj, sheet.Attribute("subsheetid").Value); stageExtractor.Load(); var page = new PageStage(sheet); stageExtractor.Stages.ForEach(i => i.PageName = page.Name); page.Stages = stageExtractor.Stages; res.Add(page); } return(res); }