Esempio n. 1
0
        public void Navigator()
        {
            XmlDataDocument doc = new XmlDataDocument();

            doc.DataSet.ReadXmlSchema("Test/System.Xml/region.xsd");
            doc.Load("Test/System.Xml/region.xml");

            XPathNavigator Nav = doc.CreateNavigator();

            Nav.MoveToRoot();
            Nav.MoveToFirstChild();

            Assert.AreEqual("Root", Nav.Name.ToString(), "test#01");
            Assert.AreEqual(string.Empty, Nav.NamespaceURI.ToString(), "test#02");
            Assert.AreEqual("False", Nav.IsEmptyElement.ToString(), "test#03");
            Assert.AreEqual("Element", Nav.NodeType.ToString(), "test#04");
            Assert.AreEqual(string.Empty, Nav.Prefix, "test#05");

            Nav.MoveToFirstChild();
            Nav.MoveToNext();
            Assert.AreEqual("Region", Nav.Name.ToString(), "test#06");

            Assert.AreEqual("2Western", Nav.Value.Substring(0, Nav.Value.IndexOf("\n") - 1), "test#07");
            Nav.MoveToFirstChild();
            Assert.AreEqual("2", Nav.Value, "test#08");
            Nav.MoveToRoot();
            Assert.AreEqual("Root", Nav.NodeType.ToString(), "test#09");
        }
Esempio n. 2
0
    public static void Main()
    {
        // Create a DataSet and load it with customer data.
        DataSet dsNorthwind = new DataSet();
        String  sConnect;

        sConnect = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind";
        SqlConnection  nwconnect     = new SqlConnection(sConnect);
        String         sCommand      = "Select * from Customers where Region='WA'";
        SqlDataAdapter myDataAdapter = new SqlDataAdapter(sCommand, nwconnect);

        myDataAdapter.Fill(dsNorthwind, "Customers");

        // Load the DataSet into an XmlDataDocument.
        XmlDataDocument doc = new XmlDataDocument(dsNorthwind);

        // Create the XslTransform object and load the stylesheet.
        XslTransform xsl = new XslTransform();

        xsl.Load("customers.xsl");

        // Create an XPathNavigator to use in the transform.
        XPathNavigator nav = doc.CreateNavigator();

        // Create a FileStream object.
        FileStream fs = new FileStream("cust.html", FileMode.Create);

        // Transform the data.
        xsl.Transform(nav, null, fs, null);
    }
Esempio n. 3
0
        private string TransformXML(string sXML, string XSLPath)
        {
            XmlDataDocument oXML = new XmlDataDocument();
            //XPathDocument oXSL = new XPathDocument(XSLPath);

            XslCompiledTransform oTransform = new XslCompiledTransform();
            XsltArgumentList     xslArg     = new XsltArgumentList();
            string sMessage;

            //oXML.Load(new XmlTextReader(sXML, XmlNodeType.Document, null));
            oXML.Load(sXML);
            XPathNavigator nav = oXML.CreateNavigator();

            oTransform.Load(XSLPath);

            try
            {
                System.IO.MemoryStream oText    = new System.IO.MemoryStream();
                XmlTextWriter          xmlWrite = new XmlTextWriter(oText, System.Text.Encoding.UTF8);
                oTransform.Transform(nav, xmlWrite);
                xmlWrite.Flush();
                oText.Flush();
                oText.Position = 1;
                System.IO.StreamReader sr = new System.IO.StreamReader(oText);
                sMessage = sr.ReadToEnd();
                oText.Close();
                return(sMessage);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 4
0
        private static void LogErrorEventlog(XmlDataDocument _XmlDataDocument)
        {
            if (!EventLog.SourceExists("NetVerk.fo"))
            {
                EventLog.CreateEventSource("NetVerk.fo", "Application");
            }
            EventLog myLog = new EventLog();

            myLog.Source = "NetVerk.fo";
            string         _ErrorString = "Error:";
            XPathNavigator navigator    = _XmlDataDocument.CreateNavigator();

            navigator.MoveToFirst();
            navigator.MoveToFirstChild();
            navigator.MoveToFirstChild();
            navigator.MoveToFirstChild();
            //Format :
            //Application name, Desription
            for (int i = 0; i < 2; i++)
            {
                _ErrorString += navigator.LocalName + " - ";
                navigator.MoveToFirstChild();
                _ErrorString += navigator.Value + "   ";
                navigator.MoveToParent();
                navigator.MoveToNext();
            }

            myLog.WriteEntry(_ErrorString);
        }
Esempio n. 5
0
        private static void LogErrorFile(XmlDataDocument _XmlDataDocument)
        {
            CheckDirectory(InnerXmlFileName);
            _innerXmlTextFileMutex.WaitOne();
            FileInfo     _LogFile = new FileInfo(InnerXmlFileName);
            StreamWriter _SW;

            if (!_LogFile.Exists)
            {
                _SW = _LogFile.CreateText();
            }
            else
            {
                _SW = _LogFile.AppendText();
            }
            _SW.WriteLine("<Log>");
            _SW.WriteLine("\t<Category>");
            _SW.WriteLine("\tError");
            _SW.WriteLine("\t</Category>");
            _SW.WriteLine("\t<DateTime>");
            _SW.WriteLine("\t" + DateTime.Now.ToString());
            _SW.WriteLine("\t</DateTime>");
            _SW.WriteLine("\t<Message>");
            XPathNavigator navigator = _XmlDataDocument.CreateNavigator();

            navigator.MoveToFirst();
            navigator.MoveToFirstChild();
            navigator.MoveToFirstChild();
            navigator.MoveToFirstChild();
            //Format :
            //Application name
            //Desription
            //Details
            //LineNumber
            //SourceLine
            for (int i = 0; i < 5; i++)
            {
                _SW.WriteLine("\t\t<" + navigator.LocalName + ">");
                navigator.MoveToFirstChild();
                _SW.WriteLine("\t\t" + navigator.Value);
                navigator.MoveToParent();
                _SW.WriteLine("\t\t</" + navigator.LocalName + ">");
                navigator.MoveToNext();
            }
            _SW.WriteLine("\t</Message>");
            _SW.WriteLine("</Log>");
            _SW.Flush();
            _SW.Close();
            _innerXmlTextFileMutex.ReleaseMutex();
        }
Esempio n. 6
0
 /// <summary>
 /// Generates an XPath navigatable dataset based on sql
 /// </summary>
 /// <param name="sql">The SQL to execute</param>
 /// <param name="setName">Name of the returned set</param>
 /// <returns>A <setName></setName> element with the results, or an <error></error> element if an exception occured</returns>
 public static XPathNodeIterator GetDataSet(string sql, string setName)
 {
     try
     {
         DataSet ds      = GetDataSetFromSql(sql, setName);
         var     dataDoc = new XmlDataDocument(ds);
         return(dataDoc.CreateNavigator().Select("."));
     }
     catch (Exception e)
     {
         // If there's an exception we'll output an error element instead
         var errorDoc = new XmlDocument();
         errorDoc.LoadXml(String.Format("<error>{0}</error>", HttpUtility.HtmlEncode(e.ToString())));
         return(errorDoc.CreateNavigator().Select("."));
     }
 }
Esempio n. 7
0
        private static void LogErrorHtml(XmlDataDocument _XmlDataDocument)
        {
            _HtmlFileMutex.WaitOne();
            XslTransform _XslTransform = new XslTransform();

            _XslTransform.Load(AppDomain.CurrentDomain.BaseDirectory + "/Log/ReportTemplate.xslt");
            XPathNavigator _Navigator = _XmlDataDocument.CreateNavigator();
            string         m_LogName  = InnerXmlFileName.Replace(".txt", DateTime.Now.Ticks.ToString()) + ".html";

            CheckDirectory(m_LogName);
            StreamWriter _SW = new StreamWriter(m_LogName);

            _XslTransform.Transform(_Navigator, null, _SW, null);
            _SW.Flush();
            _SW.Close();
            _HtmlFileMutex.ReleaseMutex();
        }
Esempio n. 8
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;
        string SQL = "SELECT * FROM authors WHERE city='Oakland'";

        // Create the ADO.NET objects.
        SqlConnection  con     = new SqlConnection(connectionString);
        SqlCommand     cmd     = new SqlCommand(SQL, con);
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet        ds      = new DataSet("AuthorsDataSet");

        // Retrieve the data.
        con.Open();
        adapter.Fill(ds, "AuthorsTable");
        con.Close();

        // Create the XmlDataDocument that wraps this DataSet.
        XmlDataDocument dataDoc = new XmlDataDocument(ds);

        // Display the XML data (with the help of an XSLT) in the XML web control.
        XmlControl.XPathNavigator  = dataDoc.CreateNavigator();
        XmlControl.TransformSource = "authors.xslt";
    }
Esempio n. 9
0
        //[Import] public static IRepository<SummaryDomain, StratificationAgeRangeMapping> StratificationAgeRanges { get; set; }
        //[Import] public static IRepository<SummaryDomain, LookupListValue> LookupListValues { get; set; }

        private static DataTable GenerateSummaryQueryResultCombinations(string summaryRequestArgsXml, IDnsResponseContext context)
        {
            SummaryRequestType requestType = SummaryRequestType.All.FirstOrDefault(rt => rt.ID == context.Request.RequestType.ID);
            DataTable          dt          = new DataTable("Results");

            if (!string.IsNullOrEmpty(summaryRequestArgsXml))
            {
                DataColumn col;
                DataRow    dr;
                string     PeriodColumn            = "Period";
                string     SettingColumn           = "Setting";
                string     SexColumn               = "Sex";
                string     AgeColumn               = "AgeGroup";
                string     CodeColumn              = string.Empty;
                string     NameColumn              = string.Empty;
                bool       IsQualifiedForExpansion = false;
                bool       IsDrugOrGenericName     = false;
                Lists?     CodeList = null;
                col = new DataColumn(PeriodColumn, "string".GetType());
                dt.Columns.Add(col);
                col = new DataColumn(SexColumn, "string".GetType());
                dt.Columns.Add(col);
                col = new DataColumn(AgeColumn, "string".GetType());
                dt.Columns.Add(col);
                col = new DataColumn(SettingColumn, "string".GetType());
                dt.Columns.Add(col);

                #region "Read Query.XML and populate rows"

                XmlDataDocument summaryRequestArgsDoc = new XmlDataDocument();
                summaryRequestArgsDoc.LoadXml(summaryRequestArgsXml);
                XPathNavigator    Nav = summaryRequestArgsDoc.CreateNavigator();
                XPathExpression   Expr;
                XPathNodeIterator INode     = null;
                string            nodeValue = string.Empty;

                string[] Years = new string[] { };
                IEnumerable <StratificationAgeRangeMapping> SelectedStratificationAgeRanges = null;
                List <string> Genders  = new List <string>();
                List <string> Settings = new List <string>();
                string[]      Codes    = new string[] { };
                List <string> Names    = new List <string>();

                switch (requestType.StringId)
                {
                case SummaryRequestType.GenericName:
                case SummaryRequestType.Incident_GenericName:
                    CodeList = Lists.GenericName;
                    break;

                case SummaryRequestType.DrugClass:
                case SummaryRequestType.Incident_DrugClass:
                    CodeList = Lists.DrugClass;
                    break;

                //case SummaryRequestType.NDC:
                //    CodeList = Lists.DrugCode;
                //    break;
                case SummaryRequestType.ICD9Diagnosis:
                case SummaryRequestType.Incident_ICD9Diagnosis:
                    CodeList = Lists.ICD9Diagnosis;
                    break;

                case SummaryRequestType.ICD9Diagnosis_4_digit:
                    CodeList = Lists.ICD9Diagnosis4Digits;
                    break;

                case SummaryRequestType.ICD9Diagnosis_5_digit:
                    CodeList = Lists.ICD9Diagnosis5Digits;
                    break;

                case SummaryRequestType.ICD9Procedures:
                    CodeList = Lists.ICD9Procedures;
                    break;

                case SummaryRequestType.ICD9Procedures_4_digit:
                    CodeList = Lists.ICD9Procedures4Digits;
                    break;

                case SummaryRequestType.HCPCSProcedures:
                    CodeList = Lists.HCPCSProcedures;
                    break;
                }

                #region "Get Names for code column e.g. pxcode,dxcode,drugclass,etc..and name column e.g. pxname,dxname,etc.."

                //The Generation of Combination Rows and Subsequent Expansion Of results applicable only to Prevalence,Incidence Queries.
                switch (requestType.StringId)
                {
                case SummaryRequestType.ICD9Diagnosis:
                case SummaryRequestType.ICD9Diagnosis_4_digit:
                case SummaryRequestType.ICD9Diagnosis_5_digit:
                case SummaryRequestType.Incident_ICD9Diagnosis:
                    CodeColumn = "DxCode";
                    NameColumn = "DxName";
                    IsQualifiedForExpansion = true;
                    break;

                case SummaryRequestType.ICD9Procedures:
                case SummaryRequestType.ICD9Procedures_4_digit:
                case SummaryRequestType.HCPCSProcedures:
                    CodeColumn = "PxCode";
                    NameColumn = "PxName";
                    IsQualifiedForExpansion = true;
                    break;

                case SummaryRequestType.GenericName:
                case SummaryRequestType.Incident_GenericName:
                    CodeColumn = string.Empty;
                    NameColumn = "GenericName";
                    IsQualifiedForExpansion = true;
                    IsDrugOrGenericName     = true;
                    break;

                case SummaryRequestType.DrugClass:
                case SummaryRequestType.Incident_DrugClass:
                    CodeColumn = string.Empty;
                    NameColumn = "DrugClass";
                    IsQualifiedForExpansion = true;
                    IsDrugOrGenericName     = true;
                    break;
                }

                #endregion

                if (IsQualifiedForExpansion)
                {
                    if (!string.IsNullOrEmpty(CodeColumn))
                    {
                        col = new DataColumn(CodeColumn, "string".GetType());
                        dt.Columns.Add(col);
                    }
                    if (!string.IsNullOrEmpty(NameColumn))
                    {
                        col = new DataColumn(NameColumn, "string".GetType());
                        dt.Columns.Add(col);
                    }

                    //Read Selected Periods e.g. 2016,2017, etc.
                    Expr  = Nav.Compile("SummaryRequestModel/Period");
                    INode = Nav.Select(Expr);
                    if (INode.MoveNext())
                    {
                        // The Period node contains a list of SINGLE-QUOTED years or quarters (for direct insertion into a SQL statement).
                        // We need to remove the quotes, along with any whitespace, for our purposes here.
                        nodeValue = INode.Current.Value.Replace("'", "").Replace(" ", "");
                        if (!string.IsNullOrEmpty(nodeValue))
                        {
                            Years = nodeValue.Split(',');
                        }
                    }

                    //Read Selected Sex stratifications
                    Expr  = Nav.Compile("SummaryRequestModel/SexStratification");
                    INode = Nav.Select(Expr);
                    if (INode.MoveNext())
                    {
                        nodeValue = INode.Current.Value.Trim();
                        if (!string.IsNullOrEmpty(nodeValue))
                        {
                            switch (nodeValue)
                            {
                            case "1":    //Female only
                                Genders.Add("F");
                                break;

                            case "2":    //Male only
                                Genders.Add("M");
                                break;

                            case "3":    //Male and Female
                                Genders.Add("F");
                                Genders.Add("M");
                                break;

                            case "4":     //Male,Female Aggregated
                                Genders.Add("All");
                                break;
                            }
                        }
                    }

                    //Read Selected Age stratifications
                    Expr  = Nav.Compile("SummaryRequestModel/AgeStratification");
                    INode = Nav.Select(Expr);
                    if (INode.MoveNext())
                    {
                        nodeValue = INode.Current.Value.Trim();
                        int ageStratificationCategoryId;
                        if (Int32.TryParse(nodeValue, out ageStratificationCategoryId))
                        {
                            throw new Lpp.Utilities.CodeToBeUpdatedException();

                            //SelectedStratificationAgeRanges = StratificationAgeRanges.All.Where(s => s.AgeStratificationCategoryId == ageStratificationCategoryId).ToList();
                        }
                    }

                    //Read Selected setting
                    Expr  = Nav.Compile("SummaryRequestModel/Setting");
                    INode = Nav.Select(Expr);
                    if (INode.MoveNext())
                    {
                        nodeValue = INode.Current.Value.Trim();
                        if (!string.IsNullOrEmpty(nodeValue))
                        {
                            //The value 'NotSpecified' means no setting selected i.e. all settings considerred.
                            if (nodeValue.Trim().ToLower() != "notspecified")
                            {
                                Settings.Add(nodeValue);
                            }
                            else
                            {
                                Settings.Add("All Settings");
                            }
                        }
                    }

                    //Read Selected Codes and their names.
                    if (CodeList != null)
                    {
                        Expr  = Nav.Compile("SummaryRequestModel/Codes");
                        INode = Nav.Select(Expr);
                        if (INode.MoveNext())
                        {
                            // Remove any spaces in the comma-delimited list of codes.
                            nodeValue = INode.Current.Value.Replace(" ", "");
                            if (!string.IsNullOrEmpty(nodeValue))
                            {
                                Codes = nodeValue.Split(',');
                            }
                            // Look up the names from the codes.
                            LookupListValue matchingNames;
                            foreach (string code in Codes)
                            {
                                // TODO: Verify this works properly if there's no match.
                                throw new Lpp.Utilities.CodeToBeUpdatedException();

                                //matchingNames = LookupListValues.All.FirstOrDefault(v => v.ListId == (int)CodeList && v.ItemCode == code);
                                //if (matchingNames != null)
                                //{
                                //    Names.Add(matchingNames.ItemName);
                                //}
                                //else
                                //{
                                //    Names.Add(string.Empty);
                                //}
                            }
                        }
                    }

                    //Create Combination Rows based on selected Period,AgeGroup,Sex,Setting and Codes.
                    if (Years.Length > 0 && SelectedStratificationAgeRanges != null && SelectedStratificationAgeRanges.Count() > 0 && Genders.Count > 0 && Settings.Count > 0)
                    {
                        foreach (string year in Years)
                        {
                            foreach (string sex in Genders)
                            {
                                foreach (StratificationAgeRangeMapping ageRange in SelectedStratificationAgeRanges)
                                {
                                    foreach (string setting in Settings)
                                    {
                                        //If Code exists for Non-drug/generic Prevalence/Incidence queries.
                                        if (Codes.Length > 0)
                                        {
                                            for (int ctr = 0; ctr < Codes.Length; ctr++)
                                            {
                                                dr = dt.NewRow();
                                                dr[PeriodColumn]  = year;
                                                dr[SexColumn]     = sex;
                                                dr[AgeColumn]     = ageRange.AgeClassification;
                                                dr[SettingColumn] = setting;
                                                dr[CodeColumn]    = Codes[ctr];
                                                if (Names.Count > ctr)
                                                {
                                                    dr[NameColumn] = Names[ctr];
                                                }
                                                dt.Rows.Add(dr);
                                            }
                                        }
                                        else
                                        {
                                            //Code does not exist for Non-drug/generic Prevalence/Incidence queries.
                                            for (int ctr = 0; ctr < Names.Count; ctr++)
                                            {
                                                dr = dt.NewRow();
                                                dr[PeriodColumn]  = year;
                                                dr[SexColumn]     = sex;
                                                dr[AgeColumn]     = ageRange.AgeClassification;
                                                dr[SettingColumn] = setting;
                                                if (Codes.Length > ctr)
                                                {
                                                    dr[CodeColumn] = Codes[ctr];
                                                }
                                                dr[NameColumn] = Names[ctr];
                                                dt.Rows.Add(dr);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    //For Drug or Generic Query No need of Settings Columns.
                    if (IsDrugOrGenericName)
                    {
                        if (dt.Columns.Contains(SettingColumn))
                        {
                            dt.Columns.Remove(SettingColumn);
                        }
                    }
                }

                #endregion
            }

            return(dt);
        }
Esempio n. 10
0
        //Code under this region is a duplication of what is in DataMartLib.Util class.
        //Any change here or there must be synchronised.

        //private static DataTable GenerateSummaryQueryResultCombinations(Query q)
        //{
        //    return GenerateSummaryQueryResultCombinations(q.QueryXml);
        //}
        private static DataTable GenerateSummaryQueryResultCombinations(string QueryXml)
        {
            DataTable dt = new DataTable("Results");

            try
            {
                if (!string.IsNullOrEmpty(QueryXml))
                {
                    DataColumn col;
                    DataRow    dr;
                    string     PeriodColumn            = "Period";
                    string     SettingColumn           = "Setting";
                    string     SexColumn               = "Sex";
                    string     AgeColumn               = "AgeGroup";
                    string     CodeColumn              = string.Empty;
                    string     NameColumn              = string.Empty;
                    bool       IsQualifiedForExpansion = false;
                    col = new DataColumn(PeriodColumn, "string".GetType());
                    dt.Columns.Add(col);
                    col = new DataColumn(SexColumn, "string".GetType());
                    dt.Columns.Add(col);
                    col = new DataColumn(AgeColumn, "string".GetType());
                    dt.Columns.Add(col);
                    col = new DataColumn(SettingColumn, "string".GetType());
                    dt.Columns.Add(col);

                    #region "Read Query.XML and populate rows"

                    XmlDataDocument ObjectDoc = new XmlDataDocument();
                    ObjectDoc.LoadXml(QueryXml);
                    XPathNavigator    Nav = ObjectDoc.CreateNavigator();
                    XPathExpression   Expr;
                    XPathNodeIterator INode     = null;
                    string            nodeValue = string.Empty;

                    string[]      Years    = new string[] { };
                    string[]      Ages     = new string[] { };
                    List <string> Genders  = new List <string>();
                    List <string> Settings = new List <string>();
                    List <string> Codes    = new List <string>();
                    List <string> Names    = new List <string>();

                    #region "Get Names for code column e.g. pxcode,dxcode,drugclass,etc..and name column e.g. pxname,dxname,etc.."

                    //The Generation of Combination Rows and Subsequent Expansion Of results applicable only to Prevalence,Incidence Queries.
                    Expr  = Nav.Compile("Query/QueryType");
                    INode = Nav.Select(Expr);
                    if (INode.MoveNext())
                    {
                        if (!string.IsNullOrEmpty(INode.Current.GetAttribute("Id", string.Empty)))
                        {
                            string querytypeid = INode.Current.GetAttribute("Id", string.Empty);
                            switch (Int32.Parse(querytypeid))
                            {
                            case ICD9Diagnosis:
                            case ICD9Diagnosis_4_digit:
                            case ICD9Diagnosis_5_digit:
                            case Incident_ICD9Diagnosis:
                            case Incident_ICD9Diagnosis_4_digit:
                            case Incident_ICD9Diagnosis_5_digit:
                                CodeColumn = "DxCode";
                                NameColumn = "DxName";
                                IsQualifiedForExpansion = true;
                                break;

                            case ICD9Procedures:
                            case ICD9Procedures_4_digit:
                            case HCPCSProcedures:
                            case Incident_ICD9Procedures:
                            case Incident_ICD9Procedures_4_digit:
                            case Incident_HCPCSProcedures:
                                CodeColumn = "PxCode";
                                NameColumn = "PxName";
                                IsQualifiedForExpansion = true;
                                break;

                            case GenericName:
                            case Incident_GenericName:
                                CodeColumn = string.Empty;
                                NameColumn = "GenericName";
                                IsQualifiedForExpansion = true;
                                break;

                            case DrugClass:
                            case Incident_DrugClass:
                                CodeColumn = string.Empty;
                                NameColumn = "DrugClass";
                                IsQualifiedForExpansion = true;
                                break;
                            }
                        }
                    }

                    #endregion

                    if (IsQualifiedForExpansion)
                    {
                        if (!string.IsNullOrEmpty(CodeColumn))
                        {
                            col = new DataColumn(CodeColumn, "string".GetType());
                            dt.Columns.Add(col);
                        }
                        if (!string.IsNullOrEmpty(NameColumn))
                        {
                            col = new DataColumn(NameColumn, "string".GetType());
                            dt.Columns.Add(col);
                        }

                        //Read Selected Periods e.g. 2016,2017, etc.
                        Expr  = Nav.Compile("Query/PeriodList");
                        INode = Nav.Select(Expr);
                        if (INode.MoveNext())
                        {
                            nodeValue = INode.Current.Value;
                            if (!string.IsNullOrEmpty(nodeValue))
                            {
                                Years = nodeValue.Split(',');
                            }
                        }

                        //Read Selected Sex stratifications
                        Expr  = Nav.Compile("Query/SexStratification");
                        INode = Nav.Select(Expr);
                        if (INode.MoveNext())
                        {
                            string sexStratId = INode.Current.GetAttribute("Id", string.Empty);
                            if (!string.IsNullOrEmpty(sexStratId))
                            {
                                switch (sexStratId)
                                {
                                case "1":    //Female only
                                    Genders.Add("F");
                                    break;

                                case "2":    //Male only
                                    Genders.Add("M");
                                    break;

                                case "3":    //Male and Female
                                    Genders.Add("F");
                                    Genders.Add("M");
                                    break;

                                case "4":     //Male,Female Aggregated
                                    Genders.Add("All");
                                    break;
                                }
                            }
                        }

                        //Read Selected Age stratifications
                        Expr  = Nav.Compile("Query/AgeStratification");
                        INode = Nav.Select(Expr);
                        if (INode.MoveNext())
                        {
                            nodeValue = INode.Current.Value;
                            if (!string.IsNullOrEmpty(nodeValue))
                            {
                                int startIndex = nodeValue.IndexOf("(");
                                int endIndex   = nodeValue.LastIndexOf(")");
                                if (startIndex > 0 && endIndex > 0 && startIndex < endIndex)
                                {
                                    nodeValue = nodeValue.Substring(startIndex + 1, (endIndex - startIndex) - 1);
                                    Ages      = nodeValue.Split(',');
                                }
                            }
                        }

                        //Read Selected setting
                        Expr  = Nav.Compile("Query/Setting");
                        INode = Nav.Select(Expr);
                        if (INode.MoveNext())
                        {
                            nodeValue = INode.Current.GetAttribute("Id", string.Empty);
                            if (!string.IsNullOrEmpty(nodeValue))
                            {
                                Settings.Add(nodeValue);
                            }
                        }

                        //Read Selected Codes and their names.
                        Expr  = Nav.Compile("Query/Codes/Code");
                        INode = Nav.Select(Expr);
                        while (INode.MoveNext())
                        {
                            if (!string.IsNullOrEmpty(INode.Current.GetAttribute("Id", string.Empty)))
                            {
                                Codes.Add(INode.Current.GetAttribute("Id", string.Empty));
                                Names.Add(INode.Current.Value);
                            }
                        }

                        //Create Combination Rows based on selected Period,AgeGroup,Sex,Setting and Codes.
                        if (Years.Length > 0 && Ages.Length > 0 && Genders.Count > 0 && Settings.Count > 0)
                        {
                            foreach (string year in Years)
                            {
                                foreach (string sex in Genders)
                                {
                                    foreach (string age in Ages)
                                    {
                                        foreach (string setting in Settings)
                                        {
                                            for (int ctr = 0; ctr < Codes.Count; ctr++)
                                            {
                                                dr = dt.NewRow();
                                                dr[PeriodColumn]  = year;
                                                dr[SexColumn]     = sex;
                                                dr[AgeColumn]     = age;
                                                dr[SettingColumn] = setting;
                                                dr[CodeColumn]    = Codes[ctr];
                                                dr[NameColumn]    = Names[ctr];
                                                dt.Rows.Add(dr);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(dt);
        }