private void PrintSchemaDetail(XmlSchema schema, TextWriter writer, int level = 0) { Func <string, string> lastpart = s => (s.Substring(s.Substring(0, s.Length - 2).LastIndexOf(':') + 1)); string tab = new string(' ', level * 2); var newPrefixes = schema.Namespaces.ToArray().Where(v => !string.IsNullOrEmpty(v.Name)).ToDictionary(k => k.Namespace, v => v.Name); foreach (var item in newPrefixes) { prefixLookup[item.Key] = item.Value; } string prefix = prefixLookup.ContainsKey(schema.TargetNamespace) ? prefixLookup[schema.TargetNamespace] + ":" : ""; string org = (schema.TargetNamespace.Contains("oasis") ? "oasis" : schema.TargetNamespace.Contains("unece") ? "unece" : ""); string name = Path.GetFileName(schema.GetFileNameWithSubDirectory()) + " \t" + lastpart(schema.TargetNamespace); writer.WriteLine($"{tab}{name} ({org} {prefix})"); var imports = schema.Includes.Cast <XmlSchemaExternal>().ToList(); foreach (var import in imports) { string s = import.GetType().Name.Substring("XmlSchema".Length); writer.Write($"{s}"); PrintSchemaDetail(import.Schema, writer, level + 1); } }