public static List <ResumeProject> DeserializeProjectExperiences(HtmlDocument document) { var node = document.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div/h3[1][. = '项目经历']"); // From DeserializeProjectExperiences/Not-Contains.html if (node == null) { return(null); } var experiences = new List <ResumeProject>(); while ((node = node.NextSibling) != null) { if (node.Name == "#text") { continue; } if (node.Name != "h2") { throw new FormatException($"Project experience node ({node.Name}) was unexpected."); } var experience = default(ResumeProject); // From DeserializeProjectExperiences/Standard.html // From DeserializeProjectExperiences/Not-Contains-Detail.html do { if (node.Name == "#text") { continue; } if (node.Name != "h2") { break; } var match = Regex.Match(node.InnerText.Trim(), @"^(\d{4}\.\d{2})\s+-\s+(至今|\d{4}\.\d{2})(( |\s)+(.+?)|)$"); // From DeserializeProjectExperiences/Not-Contains-Name.html if (!match.Success) { throw new FormatException("Project experience format was unexpected."); } // From DeserializeProjectExperiences/Standard.html experiences.Add(experience = new ResumeProject { Begin = match.Result("$1"), End = match.Result("$2"), Name = match.Result("$5") }); }while ((node = node.NextSibling) != null); if (node == null) { break; } if (node.Name != "div") { throw new FormatException($"Project experience node ({node.Name}) was unexpected."); } var table = node.SelectSingleNode("table[1][tr]"); // From DeserializeProjectExperiences/Not-Contains-Detail.html if (table == null) { continue; } // From DeserializeProjectExperiences/Standard.html var mapping = new Dictionary <string, string> { { "责任描述", null }, { "项目描述", null } }; foreach (var td in table.SelectNodes("tr/td[1]")) { var name = Regex.Match(td.InnerText.Trim(), "^(.{4}):$").Result("$1"); // Sample was not found yet. if (name == null) { throw new FormatException("Project experience detail format was unexpected."); } // Sample was not found yet. if (mapping.ContainsKey(name)) { //throw new FormatException($"Project experience ({name}) was undefined."); mapping[name] = td.SelectSingleNode("../td[2]").InnerHtml.Trim(); } } if (experience == null) { break; } // From DeserializeProjectExperiences/Standard.doc experience.Duty = mapping["责任描述"]; experience.Duty = RemoveHtmlTag(experience.Duty); experience.Description = mapping["项目描述"]; experience.Description = RemoveHtmlTag(experience.Description); } return(experiences); }
public static SourceResume ConvertTo_Dtl_V5(string content) { var dto = new SourceResume(); var source = JsonConvert.DeserializeObject <dynamic>(content); dto.Id = source.resumeNo; var Dtl = JsonConvert.DeserializeObject <dynamic>(source.detialJSonStr.ToString()); if (source.userDetials != null) { dto.Name = source.userDetials.userName; dto.Gender = source.userDetials.gender; dto.MaritalStatus = source.userDetials.maritalStatus; dto.Cellphone = source.userDetials.mobilePhone; dto.Email = source.userDetials.email; dto.Birthday = source.userDetials.birthStr; dto.CurrentResidence = source.userDetials.cityId; dto.RegisteredResidenc = source.userDetials.hUKOUCityId; } else { dto.Name = Dtl.UserMasterName; dto.Gender = Dtl.Gender; dto.MaritalStatus = Dtl.MaritalStatus; dto.Birthday = Dtl.BirthYear; } dto.ResumeId = Dtl.ResumeId; dto.ResumeName = Dtl.Name; dto.UserMasterId = Dtl.UserMasterId; dto.UserMasterExtId = Dtl.UserMasterExtId; dto.ResumeNumber = Dtl.ResumeNumber; dto.WorkStarts = Dtl.WorkYearsRangeId; dto.Degree = Dtl.CurrentEducationLevel; dto.JobStatus = Dtl.DesiredPosition[0].CurrentCareerStatus; dto.Intention = new ResumeIntention(); if (Dtl.DesiredPosition != null && Dtl.DesiredPosition.Count > 0) { dto.Intention.JobType = Dtl.DesiredPosition[0].DesiredEmploymentType; dto.Intention.Salary = Dtl.DesiredPosition[0].DesiredSalaryScope; dto.Intention.Industry = Dtl.DesiredPosition[0].DesiredIndustry; dto.Intention.Function = Dtl.DesiredPosition[0].DesiredJobType; dto.Intention.Location = Dtl.DesiredPosition[0].DesiredCity; } else { dto.Intention.JobType = "默认"; dto.Intention.Salary = "面议"; dto.Intention.Industry = "默认"; dto.Intention.Function = "中国"; dto.Intention.Location = "中国"; } if (Dtl.SelfEvaluate != null && Dtl.SelfEvaluate.Count > 0) { dto.Intention.Evaluation = Dtl.SelfEvaluate[0]?.CommentContent; } else { dto.Intention.Evaluation = ""; } #region 工作经验 if (Dtl.WorkExperience != null && Dtl.WorkExperience.Count > 0) { dto.Works = new List <ResumeWork>(); foreach (var o in Dtl.WorkExperience) { var work = new ResumeWork(); work.Begin = o.DateStart; work.End = o.DateEnd; work.Company = o.CompanyName; work.Industry = o.CompanyIndustry; work.Size = o.CompanySize; work.Nature = o.CompanyProperty; work.Department = o.ResideDepartment; work.Position = o.JobTitle; work.Description = o.WorkDescription; dto.Works.Add(work); } } #endregion #region 项目经验 if (Dtl.ProjectExperience != null && Dtl.ProjectExperience.Count > 0) { dto.Projects = new List <ResumeProject>(); foreach (var o in Dtl.ProjectExperience) { var project = new ResumeProject(); project.Begin = o.DateStart; project.End = o.DateEnd; project.Company = ""; project.Name = o.ProjectName; project.Description = o.ProjectDescription; project.Duty = o.ProjectResponsibility; dto.Projects.Add(project); } } #endregion #region 教育经历 if (Dtl.EducationExperience != null && Dtl.EducationExperience.Count > 0) { dto.Educations = new List <ResumeEducation>(); foreach (var o in Dtl.EducationExperience) { var edu = new ResumeEducation(); edu.Begin = o.DateStart; edu.End = o.DateEnd; edu.School = o.SchoolName; edu.Degree = o.EducationLevel; edu.Description = ""; edu.Major = o.MajorName; dto.Educations.Add(edu); } } #endregion #region 培训经历 if (Dtl.Training != null && Dtl.Training.Count > 0) { dto.Trainings = new List <ResumeTraining>(); foreach (var o in Dtl.Training) { var train = new ResumeTraining(); train.Begin = o.DateStart; train.End = o.DateEnd; train.Course = o.Course; train.Institution = o.Institution; train.Description = o.TrainingDescription; train.Location = o.Location; dto.Trainings.Add(train); } } #endregion #region 技能/语言 if (Dtl.ProfessionnalSkill != null && Dtl.ProfessionnalSkill.Count > 0) { dto.Skills = new List <ResumeSkill>(); foreach (var o in Dtl.ProfessionnalSkill) { var skill = new ResumeSkill { Name = o.SkillName, Level = o.MasterDegree.ToString() + "|" + o.UsedMonths.ToString() + "个月", Description = "" }; dto.Skills.Add(skill); } } if (Dtl.LanguageSkill != null && Dtl.LanguageSkill.Count > 0) { if (dto.Skills == null) { dto.Skills = new List <ResumeSkill>(); } foreach (var o in Dtl.LanguageSkill) { var skill = new ResumeSkill { Name = o.LanguageName, Level = "听说" + o.HearSpeakSkill.ToString() + "|读写" + o.ReadWriteSkill.ToString(), Description = "" }; dto.Skills.Add(skill); } } #endregion #region 证书 if (Dtl.AchieveCertificate != null && Dtl.AchieveCertificate.Count > 0) { dto.Certificates = new List <ResumeCertificate>(); foreach (var o in Dtl.AchieveCertificate) { try { var cert = new ResumeCertificate { Time = Convert.ToDateTime(o.AchieveDate), CertName = o.CertificateName, Description = o.CertificateDescription }; dto.Certificates.Add(cert); } catch { // ignored } } } #endregion #region 校内荣誉 if (Dtl.AchieveAward != null && Dtl.AchieveAward.Count > 0) { dto.Honors = new List <SchoolHonor>(); foreach (var o in Dtl.AchieveAward) { try { var cert = new SchoolHonor { Time = o.AchieveDate, Honor = o.AwardName, Description = o.Description }; dto.Honors.Add(cert); } catch { // ignored } } } #endregion #region 校内实践 if (Dtl.PracticeExperience != null && Dtl.PracticeExperience.Count > 0) { dto.Practices = new List <SchoolPractice>(); foreach (var o in Dtl.PracticeExperience) { try { var cert = new SchoolPractice { Name = o.PracticeName, Begin = o.DateStart, End = o.DateEnd, Description = o.PracticeDescription }; dto.Practices.Add(cert); } catch { // ignored } } } #endregion #region 其他 if (Dtl.Other != null && Dtl.Other.Count > 0) { dto.Others = new List <OtherInfo>(); foreach (var o in Dtl.Other) { try { var cert = new OtherInfo { Title = o.Name, Description = o.Description }; dto.Others.Add(cert); } catch { // ignored } } } #endregion return(dto); }