コード例 #1
0
        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);
            }
        }