public List <People> GetPeopleFromXmlFile(string path) { List <People> peoples = new List <People>(); // Load seed data file : ~/Resources/SeedData/People.xml XDocument xmlDoc = XDocument.Load(Path.Combine(path, PeopleSearchConstant.PeopleXmlFileName)); // Virtual path (of a directory) on server which contains images for people. string imageDirectoryPath = HttpContext.Current.Server.MapPath(PeopleSearchConstant.ImageDirectoryPath); // Iterate over each <detail> tag in xmlDoc to get people information. foreach (var DetailNode in xmlDoc.Descendants(PeopleSearchConstant.DetailsNode)) { People people = new People(); people.FirstName = DetailNode.Element(PeopleSearchConstant.FirstNameNode).Value; people.LastName = DetailNode.Element(PeopleSearchConstant.LastNameNode).Value; people.Address = DetailNode.Element(PeopleSearchConstant.AddressNode).Value; people.Interests = DetailNode.Element(PeopleSearchConstant.InterestsNode).Value; people.DateOfBirth = Convert.ToDateTime(DetailNode.Element(PeopleSearchConstant.DateOfBirthNode).Value); people.Gender = DetailNode.Element(PeopleSearchConstant.GenderNode).Value; string imageName = DetailNode.Element(PeopleSearchConstant.ImageNameNode).Value; // Virtual path of image file on server for the given <imagename> string imagePath = Path.Combine(imageDirectoryPath, imageName); people.Image = GetImageBytes(imagePath); peoples.Add(people); } return(peoples); }
private static void Show(DetailNode obj, Action beforeProperties = null) { //General NodeEditorGUILayout.PortField(obj.GetInputPort("Constraint")); NodeEditorGUILayout.PortField(obj.GetInputPort("Modifier")); obj.DistributionType = (DetailNode.Distribution)EditorGUILayout.EnumPopup("Distribution", obj.DistributionType); if (obj.DistributionType == DetailNode.Distribution.PoissonDisc) { obj.Spread = EditorGUIExtension.MinMaxFloatField("Spread", obj.Spread, 1f, 50f); } else { obj.UniformResolution = EditorGUIExtension.MinMaxIntField("Resolution", obj.UniformResolution, 2, 1024); } obj.MaxObjects = EditorGUILayout.IntField("Max Objects", obj.MaxObjects); if (beforeProperties != null) { beforeProperties(); } EditorGUIExtension.DrawMinMax("Width Scale", ref obj.WidthScale.x, ref obj.WidthScale.y); EditorGUIExtension.DrawMinMax("Height Scale", ref obj.HeightScale.x, ref obj.HeightScale.y); if (obj.MaxObjects < 1) { obj.MaxObjects = 1; } }
public List <Person> GetPersonsFromXmlFile(string path) { List <Person> persons = new List <Person>(); // Load seed data file : ~/Resources/SeedData/Person.xml XDocument xmlDoc = XDocument.Load(Path.Combine(path, Constants.PersonXmlFileName)); // Virtual path (of a directory) on server which contains images for persons. string imageDirectoryPath = HttpContext.Current.Server.MapPath(Constants.ImageDirectoryPath); // Iterate over each <detail> tag in xmlDoc to get person information. foreach (var DetailNode in xmlDoc.Descendants(Constants.DetailsNode)) { Person person = new Person(); person.FirstName = DetailNode.Element(Constants.FirstNameNode).Value; person.LastName = DetailNode.Element(Constants.LastNameNode).Value; person.Address = DetailNode.Element(Constants.AddressNode).Value; person.Hobbies = DetailNode.Element(Constants.HobbiesNode).Value; person.DateOfBirth = Convert.ToDateTime(DetailNode.Element(Constants.DateOfBirthNode).Value); person.Gender = DetailNode.Element(Constants.GenderNode).Value; string imageName = DetailNode.Element(Constants.ImageNameNode).Value; // Virtual path of image file on server for the given <imagename> string imagePath = Path.Combine(imageDirectoryPath, imageName); person.Image = GetImageBytes(imagePath); persons.Add(person); } return(persons); }
public IInformation Make(string info, string name, int vers = 0) { switch (info) { case "AssemblyNode": return(AssemblyNode.CreateNode(name, vers)); case "DetailNode": return(DetailNode.CreateNode(name, vers)); case "MaterialNode": return(MaterialNode.CreateNode(name, vers)); default: return(null); } }
public List <SearchResultObject> ParseSearch(String content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(content); HtmlNode MainContainer = SearchResultDocument.DocumentNode.SelectSingleNode("//div[contains(@class,'mainContainer')]"); HtmlNodeCollection SearchResultNodes = MainContainer.SelectNodes(".//div[contains(@class,'well')]/div[contains(@class,'row') and (contains(@class,'available') or contains(@class,'unavailable'))]"); if (!Equals(SearchResultNodes, null)) { foreach (HtmlNode SearchResultNode in SearchResultNodes) { String ImgUrl = ExtensionDescriptionAttribute.RootUrl + SearchResultNode.SelectSingleNode(".//img").Attributes["src"].Value.Substring(2), Name = String.Empty, Link = String.Empty; LocationObject Cover = new LocationObject() { Url = ImgUrl, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }; List <String> AlternateNames = new List <String>(), AuthorsArtists = new List <String>(), Genres = new List <String>(); foreach (HtmlNode DetailNode in SearchResultNode.SelectNodes(".//div[2]/div[contains(@class,'row')]")) { HtmlNode DetailTypeNode = DetailNode.SelectSingleNode(".//div[1]/b[1] | .//div[1]/strong[1]"), DetailTextNode = (DetailTypeNode != null) ? DetailTypeNode.NextSibling : null, DetailDescriptionNode = (DetailTextNode != null) ? DetailTextNode.NextSibling : null, MangaNameNode = DetailNode.SelectSingleNode(".//div[1]/h1/a"); HtmlNodeCollection DetailLinkNodes = DetailNode.SelectNodes(".//div[1]/a"); String DetailType = (DetailTypeNode != null) ? DetailTypeNode.InnerText.Trim().TrimEnd(':') : "MangaName", DetailValue = String.Empty; String[] DetailValues = { }; if (DetailLinkNodes != null) { DetailValues = (from HtmlNode LinkNode in DetailLinkNodes select LinkNode.InnerText).ToArray(); } else if (MangaNameNode != null) { DetailValue = HtmlEntity.DeEntitize(MangaNameNode.InnerText.Trim()); } else if (DetailDescriptionNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailDescriptionNode.InnerText.Trim()); } else if (DetailTextNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailTextNode.InnerText.Trim()); } switch (DetailType) { default: break; case "MangaName": Name = DetailValue; Link = MangaNameNode.Attributes["href"].Value; if (Link.StartsWith("../manga/?series=")) { Link = Link.Substring("../manga/?series=".Length); } else if (Link.StartsWith("../read-online/")) { Link = Link.Substring("../read-online/".Length); } else { Link = Name.Replace(" ", String.Empty); } break; case "Alternate Names": AlternateNames = (from String AltName in DetailValue.Split(',') select AltName.Trim()).ToList(); break; case "Author": AuthorsArtists = DetailValues.ToList(); break; case "Genre": Genres = DetailValues.ToList(); break; } } SearchResults.Add(new SearchResultObject() { Cover = Cover, Name = Name, Url = String.Format("{0}/read-online/{1}", ExtensionDescriptionAttribute.RootUrl, Link), ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Rating = -1, Artists = AuthorsArtists, Authors = AuthorsArtists }); } } return(SearchResults); }
public MangaObject ParseMangaObject(String content) { Int32 MangaInformationContentStart = content.IndexOf("<!-- Intro Series -->"), MangaInformationContentEnd = content.IndexOf("<!-- **END: Intro Series -->", MangaInformationContentStart); String MangaInformationContent = content.Substring(MangaInformationContentStart, MangaInformationContentEnd - MangaInformationContentStart); Int32 MangaChaptersContentStart = content.IndexOf("<!-- Main Content -->"), MangaChaptersContentEnd = content.IndexOf("<!-- **END: Main Content -->", MangaChaptersContentStart); String MangaChaptersContent = content.Substring(MangaChaptersContentStart, MangaChaptersContentEnd - MangaChaptersContentStart); HtmlDocument MangaObjectDocument = new HtmlDocument(); MangaObjectDocument.LoadHtml(MangaInformationContent); HtmlNode MangaObjectNode = MangaObjectDocument.DocumentNode.SelectSingleNode(".//div/div"); String MangaName = String.Empty, Description = String.Empty; List <String> AlternateNames = new List <String>(), AuthorsArtists = new List <String>(), Genres = new List <String>(); foreach (HtmlNode DetailNode in MangaObjectNode.SelectNodes(".//div[2]/div[contains(@class,'row')]")) { HtmlNode DetailTypeNode = DetailNode.SelectSingleNode(".//div[1]/b[1] | .//div[1]/strong[1]"), DetailTextNode = (DetailTypeNode != null) ? DetailTypeNode.NextSibling : null, DetailDescriptionNode = (DetailTextNode != null) ? DetailTextNode.NextSibling : null, MangaNameNode = DetailNode.SelectSingleNode(".//div[1]/h1"); HtmlNodeCollection DetailLinkNodes = DetailNode.SelectNodes(".//div[1]/a"); String DetailType = (DetailTypeNode != null) ? DetailTypeNode.InnerText.Trim().TrimEnd(':') : "MangaName", DetailValue = String.Empty; String[] DetailValues = { }; if (DetailLinkNodes != null) { DetailValues = (from HtmlNode LinkNode in DetailLinkNodes select HtmlEntity.DeEntitize(LinkNode.InnerText.Trim())).ToArray(); } else if (MangaNameNode != null) { DetailValue = HtmlEntity.DeEntitize(MangaNameNode.InnerText.Trim()); } else if (DetailDescriptionNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailDescriptionNode.InnerText.Trim()); } else if (DetailTextNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailTextNode.InnerText.Trim()); } switch (DetailType) { default: break; case "MangaName": MangaName = DetailValue; break; case "Alternate Names": AlternateNames = (from String AltName in DetailValue.Split(',') select HtmlEntity.DeEntitize(AltName.Trim())).ToList(); break; case "Author": AuthorsArtists = DetailValues.ToList(); break; case "Genre": Genres = DetailValues.ToList(); break; case "Description": Description = DetailValue; break; } } String Cover = ExtensionDescriptionAttribute.RootUrl + MangaObjectNode.SelectSingleNode(".//div[1]/img/@src").Attributes["src"].Value; List <ChapterObject> Chapters = new List <ChapterObject>(); MangaObjectDocument.LoadHtml(MangaChaptersContent); HtmlNodeCollection RawChapterList = MangaObjectDocument.DocumentNode.SelectNodes(".//div[contains(@class,'row')]"); foreach (HtmlNode RawChapterNode in RawChapterList.Skip(1)) { HtmlNode ChapterNumberNode = RawChapterNode.SelectSingleNode(".//div[1]/a"), ReleaseDate = RawChapterNode.SelectSingleNode(".//div[2]/time"); String ChapterNumber = Regex.Match(ChapterNumberNode.InnerText, @"\d+(\.\d+)?").Value; String[] ChapterSub = ChapterNumber.Trim().Split('.'); DateTime Released = DateTime.Now; String ReleasedTxt = ReleaseDate.InnerText.ToLower(); if (ReleasedTxt.StartsWith("today")) { Released = DateTime.Today; } else if (ReleasedTxt.StartsWith("yesterday")) { Released = DateTime.Today.AddDays(-1); } else if (ReleasedTxt.EndsWith("ago")) { Int32 tDelta = 0; Int32.TryParse(ReleasedTxt.Split(' ')[0], out tDelta); if (ReleasedTxt.Contains("hours")) { Released = Released.AddHours(0 - tDelta); } if (ReleasedTxt.Contains("minutes")) { Released = Released.AddMinutes(0 - tDelta); } if (ReleasedTxt.Contains("seconds")) { Released = Released.AddSeconds(0 - tDelta); } } else { Released = DateTime.ParseExact(ReleasedTxt, "MM/dd/yyyy", CultureInfo.InvariantCulture); } ChapterObject Chapter = new ChapterObject() { Name = HtmlEntity.DeEntitize(RawChapterNode.SelectSingleNode(".//div[1]/gray").InnerText), Chapter = UInt32.Parse(ChapterSub[0]), Locations = { new LocationObject() { ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Url = ExtensionDescriptionAttribute.RootUrl + ChapterNumberNode.Attributes["href"].Value }, }, Released = Released }; if (ChapterSub.Length == 2) { Chapter.SubChapter = UInt32.Parse(ChapterSub[1]); } Chapters.Add(Chapter); } Chapters.Reverse(); MangaObject MangaObj = new MangaObject() { Name = HtmlEntity.DeEntitize(MangaName), Description = HtmlEntity.DeEntitize(Description), AlternateNames = AlternateNames.ToList(), CoverLocations = { new LocationObject() { Url = Cover, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language } }, Authors = AuthorsArtists.ToList(), Artists = AuthorsArtists.ToList(), Genres = Genres.ToList(), Released = Chapters.First().Released, Chapters = Chapters }; MangaObj.AlternateNames.RemoveAll(an => an.ToLower().Equals("none")); MangaObj.Genres.RemoveAll(g => g.ToLower().Equals("none")); return(MangaObj); }
public DatabaseObject ParseDatabaseObject(String content) { HtmlDocument DatabaseObjectDocument = new HtmlDocument(); DatabaseObjectDocument.LoadHtml(content); HtmlNode ContentNode = DatabaseObjectDocument.GetElementbyId("content"), InformationNode = ContentNode.SelectSingleNode(".//div[contains(@class,'subtabbox')]"), CoverNode = InformationNode.SelectSingleNode(".//div[2]/img"), DetailsNode = InformationNode.SelectSingleNode(".//table[contains(@class,'details')]"), SummaryNode = DatabaseObjectDocument.GetElementbyId("summary").SelectSingleNode(".//p"), TagsNode = DatabaseObjectDocument.GetElementbyId("tags").SelectSingleNode(".//p"), LocationNode = ContentNode.SelectSingleNode(".//div[contains(@class,'tab selected')]/a"); String Name = InformationNode.SelectSingleNode(".//h1").InnerText; List <String> Genres = (from String Tag in TagsNode.InnerText.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) select Tag.Trim()).ToList(), AlternateNames = new List <String>(), Staff = new List <String>(); Int32 ReleaseYear = 0; LocationObject Location = new LocationObject() { ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Url = String.Format("{0}{1}", ExtensionDescriptionAttribute.RootUrl, LocationNode.Attributes["href"].Value), }; foreach (HtmlNode DetailNode in DetailsNode.SelectNodes(".//tr")) { String DetailType = DetailNode.SelectSingleNode(".//td[1]").InnerText.Trim().TrimEnd(':'), DetailValue = DetailNode.SelectSingleNode(".//td[2]").InnerText.Trim(); switch (DetailType) { default: case "": break; case "Original title": case "Alternative Titles": foreach (String value in DetailValue.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (!AlternateNames.Contains(value)) { AlternateNames.Add(HtmlEntity.DeEntitize(value)); } } break; case "Writer(s)": case "Artist(s)": foreach (String value in DetailValue.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (!Staff.Contains(value)) { Staff.Add(HtmlEntity.DeEntitize(value)); } } break; case "Year": Int32.TryParse(DetailValue, out ReleaseYear); break; } } List <LocationObject> Covers = new List <LocationObject>(); if (CoverNode != null) { Covers.Add(new LocationObject() { Url = String.Format("{0}{1}", ExtensionDescriptionAttribute.RootUrl, CoverNode.Attributes["src"].Value), ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }); } return(new DatabaseObject() { Name = HtmlEntity.DeEntitize(Name), AlternateNames = AlternateNames, Covers = Covers, Description = HtmlEntity.DeEntitize(SummaryNode.InnerText), Genres = Genres, Locations = { Location }, Staff = Staff, ReleaseYear = ReleaseYear, }); }