Dreamine.Web 1.0.0.0
WPF와 Blazor를 한 코드 흐름으로 연결하고 반복적인 MVVM 코드를 줄이는 오픈소스 FullKit 공식 웹 애플리케이션입니다.
로딩중...
검색중...
일치하는것 없음
XmlDocParser.cs
이 파일의 문서화 페이지로 가기
1using System.IO;
2using System.Xml.Linq;
4
6
15public static class XmlDocParser
16{
41 public static List<DocMember> Parse(string xmlPath)
42 {
43 if (!File.Exists(xmlPath)) return [];
44
45 try
46 {
47 var doc = XDocument.Load(xmlPath);
48 var members = doc.Descendants("member");
49 var result = new List<DocMember>();
50
51 foreach (var m in members)
52 {
53 var name = m.Attribute("name")?.Value ?? string.Empty;
54 var member = new DocMember
55 {
56 FullName = name,
57 ShortName = ExtractShortName(name),
58 Kind = ParseKind(name),
59 Summary = CleanText(m.Element("summary")?.Value),
60 Remarks = CleanText(m.Element("remarks")?.Value),
61 Returns = CleanText(m.Element("returns")?.Value),
62 Params = m.Elements("param")
63 .Select(p => new DocParam
64 {
65 Name = p.Attribute("name")?.Value ?? string.Empty,
66 Description = CleanText(p.Value)
67 }).ToList(),
68 TypeName = ExtractTypeName(name)
69 };
70 result.Add(member);
71 }
72
73 return result;
74 }
75 catch
76 {
77 return [];
78 }
79 }
80
105 private static DocMemberKind ParseKind(string name) => name.Length > 1 ? name[0] switch
106 {
107 'T' => DocMemberKind.Type,
108 'M' => DocMemberKind.Method,
109 'P' => DocMemberKind.Property,
110 'F' => DocMemberKind.Field,
111 'E' => DocMemberKind.Event,
113 } : DocMemberKind.Type;
114
139 private static string ExtractShortName(string name)
140 {
141 var dotName = name.Length > 2 ? name[2..] : name;
142 var paren = dotName.IndexOf('(');
143 if (paren >= 0) dotName = dotName[..paren];
144 var last = dotName.LastIndexOf('.');
145 return last >= 0 ? dotName[(last + 1)..] : dotName;
146 }
147
172 private static string? ExtractTypeName(string name)
173 {
174 if (name.Length < 3) return null;
175 var dotName = name[2..];
176 var paren = dotName.IndexOf('(');
177 if (paren >= 0) dotName = dotName[..paren];
178 var last = dotName.LastIndexOf('.');
179 if (last < 0) return null;
180 var typePart = dotName[..last];
181 var typeLast = typePart.LastIndexOf('.');
182 return typeLast >= 0 ? typePart[(typeLast + 1)..] : typePart;
183 }
184
209 private static string? CleanText(string? raw)
210 {
211 if (string.IsNullOrWhiteSpace(raw)) return null;
212 var lines = raw.Split('\n')
213 .Select(l => l.Trim())
214 .Where(l => l.Length > 0);
215 return string.Join(" ", lines);
216 }
217}
static List< DocMember > Parse(string xmlPath)
static ? string CleanText(string? raw)
static DocMemberKind ParseKind(string name)
static ? string ExtractTypeName(string name)
static string ExtractShortName(string name)