//#define XMLTV_PARSER_TESTING // when defined will allow calls to be made to _imp_TestParse() using System; using System.Collections.Generic; using System.Linq; using System.Text; using libxmltv.Interfaces; using System.Diagnostics; using System.Xml.Linq; namespace libxmltv.Core { internal class XMLTVParser : IDisposable { private XMLTVRuntimeInstance instance; internal static void CreateInstance(XMLTVRuntimeInstance xmltv) { using (XMLTVParser g = new XMLTVParser(xmltv)) { } } protected XMLTVParser(XMLTVRuntimeInstance xmltv) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Creating Instance of XMLTVParser"); //IXMLTV_LOADER _xmltv; //if (!Internals.VerifyInstance(xmltv, out _xmltv)) { return; } //XMLTV_LOADER = _xmltv; //Create(); instance = xmltv; Create(); } #region IXMLTV_PARSER members //public IXMLTV_LOADER XMLTV_LOADER { get; private set; } ////public void TestParse() { _imp_TestParse(); } //public IXMLTVSource Source { get; private set; } //public Dictionary Channels { get; private set; } //public Dictionary Programs { get; private set; } #endregion #region Parser Testing Methods [Conditional("XMLTV_PARSER_TESTING")] private void _imp_TestParse() { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Running XML_PARSER Test"); var doc = instance.XmlDoc; ParseRootElements(doc); ParseChannels(doc); ParsePrograms(doc); } [Conditional("XMLTV_PARSER_TESTING")] private void ParseRootElements(XDocument doc) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Parseing Root Data"); Debug.Assert(doc.Root.Name == XMLTVConstants.ROOT_ELEMENT, string.Format("Expected Root Element: '{0}' but read: '{1}'", XMLTVConstants.ROOT_ELEMENT, doc.Root.Name)); XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\tRoot: {0}", doc.Root.Name); var attributes = doc.Root.Attributes().ToList(); foreach (var attribute in attributes) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t{0}: {1}", attribute.Name, attribute.Value); } } [Conditional("XMLTV_PARSER_TESTING")] private void ParseChannels(XDocument doc) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Parsing Channel Data"); var elements = doc.Root.Descendants(XMLTVConstants.CHANNEL_ELEMENT).ToList(); foreach (var element in elements) { if (element.HasAttributes) { foreach (var attribute in element.Attributes()) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t{0} {1}: {2}",element.Name, attribute.Name, attribute.Value); } } foreach (var childEllement in element.Descendants()) { if (childEllement.HasAttributes) { foreach (var attribute in childEllement.Attributes()) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t\t{0}: {1}", attribute.Name, attribute.Value); } } XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t\t{0}: {1}", childEllement.Name, childEllement.Value); } } } [Conditional("XMLTV_PARSER_TESTING")] private void ParsePrograms(XDocument doc) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Parsing Program Data"); var elements = doc.Root.Descendants(XMLTVConstants.PROGRAM_ELEMENT).ToList(); foreach (var element in elements) { if (element.HasAttributes) { foreach (var attribute in element.Attributes()) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t{0} {1}: {2}", element.Name, attribute.Name, attribute.Value); } } foreach (var childEllement in element.Descendants()) { if (childEllement.HasAttributes) { foreach (var attribute in childEllement.Attributes()) { XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t\t{0}: {1}", attribute.Name, attribute.Value); } } XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t\t\t{0}: {1}", childEllement.Name, childEllement.Value); } //break; } } #endregion #region Creation Methods private void Create() { CreateXMLTVSource(); CreateXMLTVChannels(); CreateXMLTVPrograms(); } private void CreateXMLTVSource() { //XMLTVSource source = new XMLTVSource(instance); //instance.Source = source; XMLTVSource.CreateInstance(instance); } private void CreateXMLTVChannels() { //XMLTVChannelCollection channels = new XMLTVChannelCollection(instance); //instance.Channels = channels.Collection; XMLTVChannelCollection.CreateInstance(instance); } private void CreateXMLTVPrograms() { //XMLTVProgramCollection programs = new XMLTVProgramCollection(instance); //instance.Programs = programs.Collection; XMLTVProgramCollection.CreateInstance(instance); } #endregion public void Dispose() { //throw new NotImplementedException(); } } }