public static NavDocument Read(XDocument xml) { if (xml == null) { throw new ArgumentNullException(nameof(xml)); } if (xml.Root == null) { throw new ArgumentException("XML document has no root element.", nameof(xml)); } var ns = xml.Root.Name.Namespace; var head = xml.Root?.Element(ns + NavElements.Head); var body = xml.Root?.Element(ns + NavElements.Body); var nav = new NavDocument { Head = new NavHead { Dom = head, Title = head?.Element(ns + NavElements.Title)?.Value, Links = head?.Elements(ns + NavElements.Link).AsObjectList(elem => new NavHeadLink { Class = elem.Attribute(NavHeadLink.Attributes.Class)?.Value, Href = elem.Attribute(NavHeadLink.Attributes.Href)?.Value, Rel = elem.Attribute(NavHeadLink.Attributes.Rel)?.Value, Title = elem.Attribute(NavHeadLink.Attributes.Title)?.Value, Type = elem.Attribute(NavHeadLink.Attributes.Type)?.Value, Media = elem.Attribute(NavHeadLink.Attributes.Media)?.Value }) ?? new List <NavHeadLink>(), Metas = head?.Elements(ns + NavElements.Meta).AsObjectList(elem => new NavMeta { Name = elem.Attribute(NavMeta.Attributes.Name)?.Value, Content = elem.Attribute(NavMeta.Attributes.Content)?.Value, Charset = elem.Attribute(NavMeta.Attributes.Charset)?.Value }) ?? new List <NavMeta>() }, Body = new NavBody { Dom = body, Navs = body?.Descendants(ns + NavElements.Nav).AsObjectList(elem => new NavNav { Dom = elem, Id = elem.Attribute(NavNav.Attributes.Id)?.Value, Class = elem.Attribute(NavNav.Attributes.Class)?.Value, Hidden = elem.Attribute(NavNav.Attributes.Hidden)?.Value, Type = elem.Attribute(NavNav.Attributes.Type)?.Value }) } }; return(nav); }
private void AssertNav(NavDocument expected, NavDocument actual) { Assert.Equal(expected == null, actual == null); if (expected != null && actual != null) { Assert.Equal(expected.Head == null, actual.Head == null); if (expected.Head != null && actual.Head != null) { Assert.Equal(expected.Head.Title, actual.Head.Title); AssertCollection(expected.Head.Links, actual.Head.Links, (a, b) => { Assert.Equal(a.Class, b.Class); Assert.Equal(a.Href, b.Href); Assert.Equal(a.Rel, b.Rel); Assert.Equal(a.Title, b.Title); Assert.Equal(a.Type, b.Type); Assert.Equal(a.Media, b.Media); }); AssertCollection(expected.Head.Metas, actual.Head.Metas, (a, b) => { Assert.Equal(a.Charset, b.Charset); Assert.Equal(a.Name, b.Name); Assert.Equal(a.Content, b.Content); }); } Assert.Equal(expected.Body == null, actual.Body == null); if (expected.Body != null && actual.Body != null) { Assert.Equal(expected.Body.Dom == null, actual.Body.Dom == null); AssertCollection(expected.Body.Navs, actual.Body.Navs, (a, b) => { Assert.Equal(a.Dom == null, b.Dom == null); Assert.Equal(a.Class, b.Class); Assert.Equal(a.Hidden, b.Hidden); Assert.Equal(a.Id, b.Id); Assert.Equal(a.Type, b.Type); }); } } }
private void AssertNav(NavDocument expected, NavDocument actual) { Assert.AreEqual(expected == null, actual == null, nameof(actual)); if (expected != null && actual != null) { Assert.AreEqual(expected.Head == null, actual.Head == null, nameof(actual.Head)); if (expected.Head != null && actual.Head != null) { Assert.AreEqual(expected.Head.Title, actual.Head.Title); AssertCollection(expected.Head.Links, actual.Head.Links, nameof(actual.Head.Links), (a, b) => { Assert.AreEqual(a.Class, b.Class, "Link.Class"); Assert.AreEqual(a.Href, b.Href, "Link.Href"); Assert.AreEqual(a.Rel, b.Rel, "Link.Rel"); Assert.AreEqual(a.Title, b.Title, "Link.Title"); Assert.AreEqual(a.Type, b.Type, "Link.Type"); Assert.AreEqual(a.Media, b.Media, "Link.Media"); }); AssertCollection(expected.Head.Metas, actual.Head.Metas, nameof(actual.Head.Metas), (a, b) => { Assert.AreEqual(a.Charset, b.Charset, "Meta.Charset"); Assert.AreEqual(a.Name, b.Name, "Meta.Name"); Assert.AreEqual(a.Content, b.Content, "Meta.Content"); }); } Assert.AreEqual(expected.Body == null, actual.Body == null, nameof(actual.Body)); if (expected.Body != null && actual.Body != null) { Assert.AreEqual(expected.Body.Dom == null, actual.Body.Dom == null); AssertCollection(expected.Body.Navs, actual.Body.Navs, nameof(actual.Body.Navs), (a, b) => { Assert.AreEqual(a.Dom == null, b.Dom == null); Assert.AreEqual(a.Class, b.Class, "Nav.Class"); Assert.AreEqual(a.Hidden, b.Hidden, "Nav.Hidden"); Assert.AreEqual(a.Id, b.Id, "Nav.Id"); Assert.AreEqual(a.Type, b.Type, "Nav.Type"); }); } } }
/* * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@ Method @@@@ * @@@@****************************Read Epub ******************************************************@@@@ * @@@@ @@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ //------------method geeting smil fil ----------- public void ProcessEpub(string currentFile) { try { string EpubNummerOnly = Path.GetFileNameWithoutExtension(currentFile); // Read an epub file EpubBook book = EpubReader.Read(currentFile); // Read metadata string title = book.Title; FinalReportlist.Add("Title of book = " + title); //******Author****** var authors = book.Authors; int Authors_count = 0; string Authors_Metadata = ""; foreach (var eachData in authors) { Authors_count++; Authors_Metadata = Authors_Metadata + " (" + eachData + "), "; } FinalReportlist.Add("Author of book= (" + Authors_count + ")" + Authors_Metadata); //******images*********** ICollection <EpubByteFile> images = book.Resources.Images; FinalReportlist.Add("Images in book= (" + images.Count + ")"); //******other metadata*********** // Access internal EPUB format specific data structures. EpubFormat format = book.Format; OcfDocument ocf = format.Ocf; OpfDocument opf = format.Opf; NcxDocument ncx = format.Ncx; NavDocument nav = format.Nav; var bookVersion = format.Opf.EpubVersion; var bookIsbnID = format.Opf.Metadata.Identifiers; var allMetadata = opf.Metadata.Languages; string language_Metadata = ""; foreach (var eachData in allMetadata) { language_Metadata = language_Metadata + eachData + ", "; } FinalReportlist.Add("Language of of book= (" + allMetadata.Count + ")" + language_Metadata); FinalReportlist.Add("version of book= " + bookVersion); // Get table of contents FinalReportlist.Add("\n*****Table of Content*****"); ICollection <EpubChapter> chapters = book.TableOfContents; foreach (var eachH1chapter in chapters) { FinalReportlist.Add(eachH1chapter.Title); //*******writing h2 Chapter**** if (eachH1chapter.SubChapters.Count >= 1) { var h2chapter = eachH1chapter.SubChapters; foreach (var eachH2chapter in h2chapter) { FinalReportlist.Add("\t" + eachH2chapter.Title); //*******writing h3 Chapter**** if (eachH2chapter.SubChapters.Count >= 1) { var h3chapter = eachH2chapter.SubChapters; foreach (var eachH3chapter in h3chapter) { FinalReportlist.Add("\t\t" + eachH3chapter.Title); } } } } } }// try end catch (Exception e) { string error = "\n Error in syncStart " + Program.Current_bookPath; Console.WriteLine(error + e); Program.Global_error = Program.Global_error + error; } // catch end } //syncStart end