private static void Visit(XmlDocFile docFile, XmlNode document) { foreach (var item in document.ChildNodes) { if (item is XmlElement xmlElement) { if (string.Equals(xmlElement.Name, "assembly", StringComparison.OrdinalIgnoreCase)) { var asmName = xmlElement.ChildNodes.OfType <XmlNode>().FirstOrDefault(x => string.Equals(x.Name, "name", StringComparison.OrdinalIgnoreCase)); var text = asmName?.InnerText; if (!string.IsNullOrEmpty(text)) { docFile.AssemblyName = text; } continue; } if (string.Equals(xmlElement.Name, "members", StringComparison.OrdinalIgnoreCase)) { VisitMembers(docFile, xmlElement); continue; } Visit(docFile, xmlElement); } } }
private static XmlDocFile ParseDocFile(string appPath) { var document = new XmlDocument(); document.Load(appPath); var docFile = new XmlDocFile(document) { FilePath = appPath }; Visit(docFile, document); return(docFile); }
private static void VisitMembers(XmlDocFile docFile, XmlElement xmlElement) { foreach (var childNode in xmlElement.ChildNodes.OfType <XmlElement>()) { var memberName = childNode.GetAttributeValue("name"); var summary = childNode.ChildNodes.OfType <XmlElement>().FirstOrDefault(x => string.Equals(x.Name, "summary", StringComparison.OrdinalIgnoreCase)); if (string.IsNullOrEmpty(memberName) || summary == null) { continue; } docFile.Members.Add(memberName, new XmlDocMember { Name = memberName, SummaryNode = summary, MemberNode = childNode, ParentFile = docFile }); } }
static bool TryGetCrefImpl(string crefValue, XmlDocFile docFile, out XmlDocMember member) { return(docFile.Members.TryGetValue(crefValue, out member)); }