/// <summary> /// Method to obtain all the warnings as a result of the validation of the html /// </summary> /// <param name="urlDocument">Xml document that represents the result of the validation</param> /// <param name="mNamespace">Namespace used to obtain some data such as line, colum, etc.</param> private void HTMLWarnings(XDocument urlDocument, XNamespace mNamespace) { warnings = new Warnings(); //Obtaining the descendants of the elements labeled "warnings". With this we obtain all the warnings var warningsElements = from e in urlDocument.Descendants(mNamespace + "warnings") select e; //Obtaining the descendants of the elements labeled "warningcount". With this we can obtain the number of warnings. var warningCountElement = from e in warningsElements.Descendants(mNamespace + "warningcount") select e; //Obtaining the descendants of the elements labeled "warning". With this we can obtain information from each of the warnings. var warningListElements = from e in warningsElements.Descendants(mNamespace + "warning") select e; //Iterate over the 'warningaccount' variable to obtain the number of warnings foreach (var element in warningCountElement) { //Store the value of the count warnings.warningCount = element.Value; //Iterate over the 'warningListElements' variable to obtain each error foreach (var warningElement in warningListElements) { //Create an instance of a Warning Warning warning = new Warning(); //If there is a number of line if (warningElement.Descendants(mNamespace + "line").Count() > 0) //Store all the información of the warning. warning.line = warningElement.Descendants(mNamespace + "line").First().Value; //If there is a number of column if (warningElement.Descendants(mNamespace + "col").Count() > 0) //Store all the información of the warning. warning.col = warningElement.Descendants(mNamespace + "col").First().Value; //If there is an explnation if (warningElement.Descendants(mNamespace + "explanation").Count() > 0) //Store all the información of the warning. warning.explanation = warningElement.Descendants(mNamespace + "explanation").First().Value; //If there is a source if (warningElement.Descendants(mNamespace + "source").Count() > 0) //Store all the información of the warning. warning.source = warningElement.Descendants(mNamespace + "source").First().Value; //If there is a messageid if (warningElement.Descendants(mNamespace + "messageid").Count() > 0) { //If the messageid stars with a 'W' it means that the warning is a PotentialIssue if (warningElement.Descendants(mNamespace + "messageid").First().Value.StartsWith("W")) { //Create an instance of a WarningPotentialIssue WarningPotentialIssue warningPotentialIssue = new WarningPotentialIssue(); //Store the messageid in the warningPotentialIssue object warningPotentialIssue.messageid = warningElement.Descendants(mNamespace + "messageid").First().Value; //If there is a message if (warningElement.Descendants(mNamespace + "message").Count() > 0) //Store the message in the warningPotentialIssue object warningPotentialIssue.message = warningElement.Descendants(mNamespace + "message").First().Value; ////Add the warningPotentialIssue to the list of warningPotentialIssues. warningPotentialIssues.Add(warningPotentialIssue); } //If the messageid not stars with a 'W' else { //Store the messageid warning.messageid = warningElement.Descendants(mNamespace + "messageid").First().Value; //If there is a message if (warningElement.Descendants(mNamespace + "message").Count() > 0) //Store the message warning.message = warningElement.Descendants(mNamespace + "message").First().Value; //Add the warning to the list of warnings warnings.Add(warning); } } } } }
/// <summary> /// Method to obtain all the warnings as a result of the validation of the html /// </summary> /// <param name="urlDocument">Xml document that represents the result of the validation</param> /// <param name="mNamespace">Namespace used to obtain some data such as line, colum, etc.</param> private void HTMLWarnings(XDocument urlDocument, XNamespace mNamespace) { warnings = new Warnings(); //Obtaining the descendants of the elements labeled "warnings". With this we obtain all the warnings var warningsElements = from e in urlDocument.Descendants(mNamespace + "warnings") select e; //Obtaining the descendants of the elements labeled "warningcount". With this we can obtain the number of warnings. var warningCountElement = from e in warningsElements.Descendants(mNamespace + "warningcount") select e; //Obtaining the descendants of the elements labeled "warning". With this we can obtain information from each of the warnings. var warningListElements = from e in warningsElements.Descendants(mNamespace + "warning") select e; //Iterate over the 'warningaccount' variable to obtain the number of warnings foreach (var element in warningCountElement) { //Store the value of the count warnings.warningCount = element.Value; //Iterate over the 'warningListElements' variable to obtain each error foreach (var warningElement in warningListElements) { //Create an instance of a Warning Warning warning = new Warning(); //If there is a number of line if (warningElement.Descendants(mNamespace + "line").Count() > 0) { //Store all the información of the warning. warning.line = warningElement.Descendants(mNamespace + "line").First().Value; } //If there is a number of column if (warningElement.Descendants(mNamespace + "col").Count() > 0) { //Store all the información of the warning. warning.col = warningElement.Descendants(mNamespace + "col").First().Value; } //If there is an explnation if (warningElement.Descendants(mNamespace + "explanation").Count() > 0) { //Store all the información of the warning. warning.explanation = warningElement.Descendants(mNamespace + "explanation").First().Value; } //If there is a source if (warningElement.Descendants(mNamespace + "source").Count() > 0) { //Store all the información of the warning. warning.source = warningElement.Descendants(mNamespace + "source").First().Value; } //If there is a messageid if (warningElement.Descendants(mNamespace + "messageid").Count() > 0) { //If the messageid stars with a 'W' it means that the warning is a PotentialIssue if (warningElement.Descendants(mNamespace + "messageid").First().Value.StartsWith("W")) { //Create an instance of a WarningPotentialIssue WarningPotentialIssue warningPotentialIssue = new WarningPotentialIssue(); //Store the messageid in the warningPotentialIssue object warningPotentialIssue.messageid = warningElement.Descendants(mNamespace + "messageid").First().Value; //If there is a message if (warningElement.Descendants(mNamespace + "message").Count() > 0) { //Store the message in the warningPotentialIssue object warningPotentialIssue.message = warningElement.Descendants(mNamespace + "message").First().Value; } ////Add the warningPotentialIssue to the list of warningPotentialIssues. warningPotentialIssues.Add(warningPotentialIssue); } //If the messageid not stars with a 'W' else { //Store the messageid warning.messageid = warningElement.Descendants(mNamespace + "messageid").First().Value; //If there is a message if (warningElement.Descendants(mNamespace + "message").Count() > 0) { //Store the message warning.message = warningElement.Descendants(mNamespace + "message").First().Value; } //Add the warning to the list of warnings warnings.Add(warning); } } } } }
public static validationResults ValidateAccessibility(string htmlSourceCode) { var diz = new Dictionary<string, object>(); diz.Add("MAX_FILE_SIZE", "52428800"); diz.Add("pastehtml", htmlSourceCode); diz.Add("validate_paste", "Check it"); diz.Add("enable_html_validation", "1"); diz.Add("radio_gid[]", "7"); diz.Add("checkbox_gid[]", "8"); diz.Add("rpt_format", "1"); //diz.Add("enable_html_validation", "1"); using (var resp = FormUpload.MultipartFormDataPost( "http://achecker.ca/checker/index.php", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)", diz )) { using (var str = resp.GetResponseStream()) { HtmlDocument doc = new HtmlDocument(); doc.Load(str); var errorsHtml = doc.DocumentNode.SelectSingleNode(@"//*[@id='AC_errors']"); var errorNodes = errorsHtml.SelectNodes(@"child::*[@class='gd_one_check']"); var errorList = new List<Error>(); if (errorNodes != null) { foreach (var itm in errorNodes) { try { var err = new Error(); err.message = itm.SelectSingleNode(@"child::*[@class='gd_msg']/a").InnerText; err.explanation = itm.SelectSingleNode(@"child::*[@class='gd_question_section']").InnerText; err.explanation = Regex.Replace(err.explanation, @"[\s]+", " "); var location = itm.SelectSingleNode(@"child::table/tr/td/em").InnerText; var m = Regex.Match(location, @"Line\s(?:(?<line>[0-9]+)),\sColumn\s(?:(?<col>[0-9]+))"); err.col = int.Parse(m.Groups["col"].Value); err.line = int.Parse(m.Groups["line"].Value); errorList.Add(err); } catch (Exception ex) { throw ex; } } } var potentialHtml = doc.DocumentNode.SelectSingleNode(@"//*[@id='AC_potential_problems']"); var potenzialNodes = potentialHtml.SelectNodes(@"child::*[@class='gd_one_check']"); var potentialList = new List<Warning>(); if (potenzialNodes != null) { foreach (var itm in potenzialNodes) { try { var message = itm.SelectSingleNode(@"child::*[@class='gd_msg']/a").InnerText; var explanation = itm.SelectSingleNode(@"child::*[@class='gd_question_section']").InnerText; explanation = Regex.Replace(explanation, @"[\s]+", " "); var locations = itm.SelectNodes(@"child::table/tr"); foreach (var l in locations) { var warn = new Warning(); warn.message = message; warn.explanation = explanation; var location = l.SelectSingleNode(@"child::td/em").InnerHtml; var m = Regex.Match(location, @"Line\s(?:(?<line>[0-9]+)),\sColumn\s(?:(?<col>[0-9]+))"); warn.col = m.Groups["col"].Value; warn.line = m.Groups["line"].Value; potentialList.Add(warn); } } catch (Exception ex) { throw ex; } } } var result = new validationResults(); result.Errors = errorList; result.Potentials = new List<WarningPotentialIssue>(); result.Warnings = potentialList; return result; } } }