From 974034f9786f4a36a31951bd6a5887abf6e91d20 Mon Sep 17 00:00:00 2001 From: agent-aspose-html-examples Date: Thu, 1 Oct 2026 12:17:31 +0500 Subject: [PATCH 1/4] =?UTF-8?q?feat(web-accessibility):=20Add=2070=20Aspos?= =?UTF-8?q?e.HTML=20.NET=20C#=20examples=20for=20Web=20Accessibility=20?= =?UTF-8?q?=E2=80=94=20Aspose.HTML=20for=20.NET=2026.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tal_accessibility_errors_found_document.cs | 65 +++++ ...tions_and_src_to_video_programmatically.cs | 135 +++++++++++ ...obtain_formatted_string_errors_warnings.cs | 58 +++++ ...s_in_video_tags_using_validation_report.cs | 55 +++++ ...s_with_accessibility_and_ranking_issues.cs | 79 +++++++ ...ter_modifying_html_content_same_project.cs | 57 +++++ ...re_validating_html_document_application.cs | 78 ++++++ ...tom_compliance_thresholds_during_checks.cs | 79 +++++++ ...consistent_rule_application_across_runs.cs | 69 ++++++ ...ings_as_errors_adjust_severity_settings.cs | 45 ++++ ...om_accessibilityrules_before_validation.cs | 91 +++++++ ...alidate_multiple_html_files_efficiently.cs | 50 ++++ ...loading_html_document_for_accessibility.cs | 57 +++++ ...renced_by_track_elements_log_file_paths.cs | 93 ++++++++ ...otify_stakeholders_accessibility_status.cs | 71 ++++++ ...nt_and_reference_with_new_track_element.cs | 40 ++++ ...amps_matching_associated_media_timeline.cs | 114 +++++++++ ...al_report_apply_result_filtering_option.cs | 105 +++++++++ ...edia_accessibility_loaded_html_document.cs | 72 ++++++ ...ath_to_run_accessibility_checks_on_page.cs | 74 ++++++ ...sults_formatted_string_developer_review.cs | 71 ++++++ ...y_errors_detected_enforce_quality_gates.cs | 73 ++++++ ...indings_enforce_accessibility_standards.cs | 68 ++++++ ...t_validate_pages_save_results_xml_files.cs | 73 ++++++ ...e_html_element_issues_from_css_problems.cs | 78 ++++++ ...fore_validation_focus_critical_problems.cs | 70 ++++++ ...description_warnings_video_improvements.cs | 59 +++++ ...on_related_warnings_focused_remediation.cs | 113 +++++++++ ...cus_particular_accessibility_techniques.cs | 133 +++++++++++ ...result_to_post_in_pull_request_comments.cs | 107 +++++++++ ...y_validation_findings_review_developers.cs | 74 ++++++ ...ation_messages_for_description_warnings.cs | 68 ++++++ ...ion_summary_for_comprehensive_reporting.cs | 74 ++++++ ...th_and_validate_using_default_validator.cs | 54 +++++ ..._configuration_aspnet_core_applications.cs | 76 ++++++ ...idator_before_loading_any_html_document.cs | 76 ++++++ ...using_command_line_invocation_validator.cs | 59 +++++ ...low_to_automatically_test_pull_requests.cs | 111 +++++++++ ...ement_suggestions_each_identified_issue.cs | 134 +++++++++++ ..._identifier_and_its_pass_or_fail_status.cs | 54 +++++ ...l_path_into_validator_for_wcag_analysis.cs | 47 ++++ ...alidator_support_network_memory_sources.cs | 78 ++++++ ...levels_advisory_technique_impact_scores.cs | 89 +++++++ ...h_file_sequentially_aggregating_results.cs | 44 ++++ ...ve_validation_throughput_large_projects.cs | 151 ++++++++++++ ...vidual_json_reports_to_target_directory.cs | 79 +++++++ ...monitoring_website_accessibility_status.cs | 65 +++++ ...ityrules_getrule_show_detailed_guidance.cs | 48 ++++ ...irm_previously_reported_issues_resolved.cs | 75 ++++++ ...vel_summary_accessibility_check_outcome.cs | 81 +++++++ ...ound_and_background_colors_log_failures.cs | 117 +++++++++ ...lidate_and_store_for_further_processing.cs | 56 +++++ ...er_and_produce_consolidated_json_report.cs | 59 +++++ ...put_debug_logger_development_monitoring.cs | 130 ++++++++++ ...ure_continuous_accessibility_compliance.cs | 50 ++++ ...avetostring_method_for_later_processing.cs | 69 ++++++ ...is_and_integration_with_reporting_tools.cs | 96 ++++++++ ...batch_validation_all_html_files_nightly.cs | 64 +++++ ...ld_high_priority_accessibility_problems.cs | 79 +++++++ ...custom_textwriter_for_remote_monitoring.cs | 82 +++++++ ...slt_generate_human_readable_html_report.cs | 55 +++++ ...e_codes_and_descriptions_for_ui_display.cs | 63 +++++ ...ify_contrast_ratios_identified_elements.cs | 60 +++++ ...capture_xml_validation_output_in_memory.cs | 222 ++++++++++++++++++ ...dia_accessibility_issues_in_sample_html.cs | 84 +++++++ ...mote_url_loading_content_into_validator.cs | 98 ++++++++ ...g_attribute_for_accessibility_standards.cs | 63 +++++ ...ning_error_messages_for_rule_identifier.cs | 117 +++++++++ ...ts_grouped_target_element_type_analysis.cs | 88 +++++++ ...sing_validationresult_saveto_xml_format.cs | 41 ++++ 70 files changed, 5562 insertions(+) create mode 100644 web-accessibility/access_validationresult_errors_collection_count_total_accessibility_errors_found_document.cs create mode 100644 web-accessibility/add_missing_track_element_with_kind_captions_and_src_to_video_programmatically.cs create mode 100644 web-accessibility/call_validationresult_savetostring_obtain_formatted_string_errors_warnings.cs create mode 100644 web-accessibility/check_missing_track_elements_kind_captions_in_video_tags_using_validation_report.cs create mode 100644 web-accessibility/combine_validation_findings_with_seo_metrics_to_identify_pages_with_accessibility_and_ranking_issues.cs create mode 100644 web-accessibility/compare_two_validationresult_objects_detect_regressions_after_modifying_html_content_same_project.cs create mode 100644 web-accessibility/configure_accessibilityvalidator_custom_settings_before_validating_html_document_application.cs create mode 100644 web-accessibility/configure_validator_ignore_selected_rule_codes_allowing_custom_compliance_thresholds_during_checks.cs create mode 100644 web-accessibility/configure_validator_static_rule_repository_consistent_rule_application_across_runs.cs create mode 100644 web-accessibility/configure_validator_treat_caption_missing_warnings_as_errors_adjust_severity_settings.cs create mode 100644 web-accessibility/create_custom_rule_subset_selecting_specific_wcag_criteria_from_accessibilityrules_before_validation.cs create mode 100644 web-accessibility/create_static_accessibilityvalidator_instance_and_reuse_to_validate_multiple_html_files_efficiently.cs create mode 100644 web-accessibility/create_validator_instance_using_createvalidator_before_loading_html_document_for_accessibility.cs create mode 100644 web-accessibility/detect_absent_caption_files_referenced_by_track_elements_log_file_paths.cs create mode 100644 web-accessibility/embed_validation_results_string_into_email_body_notify_stakeholders_accessibility_status.cs create mode 100644 web-accessibility/embed_vtt_caption_file_into_html_document_and_reference_with_new_track_element.cs create mode 100644 web-accessibility/ensure_caption_tracks_contain_synchronized_timestamps_matching_associated_media_timeline.cs create mode 100644 web-accessibility/exclude_keyboard_navigation_warnings_from_final_report_apply_result_filtering_option.cs create mode 100644 web-accessibility/execute_validate_method_assess_multimedia_accessibility_loaded_html_document.cs create mode 100644 web-accessibility/execute_validator_validate_with_file_path_to_run_accessibility_checks_on_page.cs create mode 100644 web-accessibility/export_validation_results_formatted_string_developer_review.cs create mode 100644 web-accessibility/fail_build_if_critical_accessibility_errors_detected_enforce_quality_gates.cs create mode 100644 web-accessibility/fail_ci_build_validationresult_contains_error_level_findings_enforce_accessibility_standards.cs create mode 100644 web-accessibility/fetch_html_content_url_list_validate_pages_save_results_xml_files.cs create mode 100644 web-accessibility/filter_errors_by_target_type_separate_html_element_issues_from_css_problems.cs create mode 100644 web-accessibility/filter_rule_set_include_only_error_level_criteria_before_validation_focus_critical_problems.cs create mode 100644 web-accessibility/filter_validation_results_audio_description_warnings_video_improvements.cs create mode 100644 web-accessibility/filter_validation_results_display_only_caption_related_warnings_focused_remediation.cs create mode 100644 web-accessibility/filter_warnings_by_specific_ruleid_values_to_focus_particular_accessibility_techniques.cs create mode 100644 web-accessibility/generate_markdown_report_from_validationresult_to_post_in_pull_request_comments.cs create mode 100644 web-accessibility/generate_plain_text_summary_validation_findings_review_developers.cs create mode 100644 web-accessibility/identify_video_elements_lacking_audio_description_tracks_by_filtering_validation_messages_for_description_warnings.cs create mode 100644 web-accessibility/incorporate_color_contrast_verification_results_into_overall_validation_summary_for_comprehensive_reporting.cs create mode 100644 web-accessibility/initialize_htmldocument_from_file_path_and_validate_using_default_validator.cs create mode 100644 web-accessibility/inject_accessibilityvalidator_dependency_injection_enable_flexible_configuration_aspnet_core_applications.cs create mode 100644 web-accessibility/instantiate_accessibilityvalidator_using_createvalidator_before_loading_any_html_document.cs create mode 100644 web-accessibility/integrate_validation_step_into_ci_cd_pipeline_using_command_line_invocation_validator.cs create mode 100644 web-accessibility/integrate_validation_step_into_github_actions_workflow_to_automatically_test_pull_requests.cs create mode 100644 web-accessibility/iterate_accessibility_rules_advisory_techniques_list_improvement_suggestions_each_identified_issue.cs create mode 100644 web-accessibility/iterate_through_validationresult_details_to_log_each_rule_identifier_and_its_pass_or_fail_status.cs create mode 100644 web-accessibility/load_html_file_from_local_path_into_validator_for_wcag_analysis.cs create mode 100644 web-accessibility/load_html_from_stream_object_into_validator_support_network_memory_sources.cs create mode 100644 web-accessibility/prioritize_remediation_tasks_severity_levels_advisory_technique_impact_scores.cs create mode 100644 web-accessibility/process_batch_html_files_in_folder_validating_each_file_sequentially_aggregating_results.cs create mode 100644 web-accessibility/process_html_files_parallel_using_task_parallel_library_improve_validation_throughput_large_projects.cs create mode 100644 web-accessibility/process_html_folder_validate_each_output_individual_json_reports_to_target_directory.cs create mode 100644 web-accessibility/publish_validation_summaries_to_dashboard_for_continuous_monitoring_website_accessibility_status.cs create mode 100644 web-accessibility/query_specific_rule_by_code_accessibilityrules_getrule_show_detailed_guidance.cs create mode 100644 web-accessibility/re_run_validation_after_html_modifications_confirm_previously_reported_issues_resolved.cs create mode 100644 web-accessibility/read_validationresult_description_obtain_high_level_summary_accessibility_check_outcome.cs create mode 100644 web-accessibility/retrieve_contrast_ratio_values_for_specific_foreground_and_background_colors_log_failures.cs create mode 100644 web-accessibility/retrieve_validationresult_returned_by_validate_and_store_for_further_processing.cs create mode 100644 web-accessibility/run_batch_validation_on_all_html_files_in_project_folder_and_produce_consolidated_json_report.cs create mode 100644 web-accessibility/run_default_accessibility_validation_direct_console_output_debug_logger_development_monitoring.cs create mode 100644 web-accessibility/run_validation_nightly_build_process_ensure_continuous_accessibility_compliance.cs create mode 100644 web-accessibility/save_complete_validation_report_to_string_using_validationresult_savetostring_method_for_later_processing.cs create mode 100644 web-accessibility/save_validation_results_to_json_file_for_later_analysis_and_integration_with_reporting_tools.cs create mode 100644 web-accessibility/schedule_windows_task_scheduler_job_runs_batch_validation_all_html_files_nightly.cs create mode 100644 web-accessibility/set_custom_issue_severity_threshold_high_priority_accessibility_problems.cs create mode 100644 web-accessibility/stream_validation_results_to_network_socket_using_custom_textwriter_for_remote_monitoring.cs create mode 100644 web-accessibility/transform_validation_json_output_xslt_generate_human_readable_html_report.cs create mode 100644 web-accessibility/use_accessibilityrules_getall_fetch_all_wcag_rule_codes_and_descriptions_for_ui_display.cs create mode 100644 web-accessibility/use_online_color_contrast_checker_api_programmatically_verify_contrast_ratios_identified_elements.cs create mode 100644 web-accessibility/use_stringbuilder_textwriter_capture_xml_validation_output_in_memory.cs create mode 100644 web-accessibility/use_validator_within_unit_test_assert_no_multimedia_accessibility_issues_in_sample_html.cs create mode 100644 web-accessibility/validate_html_documents_retrieved_from_remote_url_loading_content_into_validator.cs create mode 100644 web-accessibility/verify_each_track_element_includes_valid_srclang_attribute_for_accessibility_standards.cs create mode 100644 web-accessibility/write_method_returning_error_messages_for_rule_identifier.cs create mode 100644 web-accessibility/write_method_returns_warning_counts_grouped_target_element_type_analysis.cs create mode 100644 web-accessibility/write_validation_results_to_xml_using_validationresult_saveto_xml_format.cs diff --git a/web-accessibility/access_validationresult_errors_collection_count_total_accessibility_errors_found_document.cs b/web-accessibility/access_validationresult_errors_collection_count_total_accessibility_errors_found_document.cs new file mode 100644 index 0000000..9303df4 --- /dev/null +++ b/web-accessibility/access_validationresult_errors_collection_count_total_accessibility_errors_found_document.cs @@ -0,0 +1,65 @@ +// Access ValidationResult.Errors collection to count total accessibility errors found in the document. + +using System; +using System.IO; +using System.Text; + +class Program +{ + static void Main() + { + try + { + // Prepare a simple HTML file for validation + string htmlContent = "Test"; + string inputFilePath = "sample.html"; + File.WriteAllText(inputFilePath, htmlContent, Encoding.UTF8); + + // Initialize WebAccessibility and validator + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the HTML document + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(inputFilePath)) + { + // Perform validation + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult detail in validationResult.Details) + { + if (!detail.Success) + { + Console.WriteLine(detail.Rule.Code + " - " + detail.Rule.Description); + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in detail.Errors) + { + Aspose.Html.Accessibility.IError error = techResult.Error; + Console.WriteLine("Error: " + error.ErrorMessage); + if (error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Aspose.Html.HTMLElement element = (Aspose.Html.HTMLElement)error.Target.Item; + Console.WriteLine("Element: " + element.OuterHTML); + } + } + } + } + } + else + { + Console.WriteLine("Document passed accessibility validation successfully."); + } + } + + // Clean up the temporary file + if (File.Exists(inputFilePath)) + { + File.Delete(inputFilePath); + } + } + catch (Exception ex) + { + Console.WriteLine("An error occurred: " + ex.Message); + } + } +} \ No newline at end of file diff --git a/web-accessibility/add_missing_track_element_with_kind_captions_and_src_to_video_programmatically.cs b/web-accessibility/add_missing_track_element_with_kind_captions_and_src_to_video_programmatically.cs new file mode 100644 index 0000000..d9c9405 --- /dev/null +++ b/web-accessibility/add_missing_track_element_with_kind_captions_and_src_to_video_programmatically.cs @@ -0,0 +1,135 @@ +// Add a missing element with kind="captions" and appropriate src attribute to a video element programmatically. + +using System; +using System.IO; +using System.Collections.Generic; +using Aspose.Html.IO; + +class MemoryStreamProvider : Aspose.Html.IO.ICreateStreamProvider, IDisposable +{ + private readonly List _streams = new List(); + + public IReadOnlyList Streams => _streams.AsReadOnly(); + + public Stream GetStream(string name, string extension) + { + var ms = new MemoryStream(); + _streams.Add(ms); + return ms; + } + + public Stream GetStream(string name, string extension, int page) + { + var ms = new MemoryStream(); + _streams.Add(ms); + return ms; + } + + public void ReleaseStream(Stream stream) + { + // No action needed; streams are kept for later reading. + } + + public void Dispose() + { + foreach (var ms in _streams) + { + ms.Dispose(); + } + _streams.Clear(); + } +} + +class Program +{ + static void Main() + { + try + { + // Prepare directories + string outputDir = Path.Combine(Directory.GetCurrentDirectory(), "AsposeHtmlOutput"); + Directory.CreateDirectory(outputDir); + + // Create a minimal sample HTML file + string inputHtmlPath = Path.Combine(outputDir, "sample.html"); + string htmlContent = @" + + +Sample + +

First paragraph.

+

Second paragraph.

+ + +"; + File.WriteAllText(inputHtmlPath, htmlContent); + + // Load the document + var document = new Aspose.Html.HTMLDocument(inputHtmlPath); + + // 1. Ensure all images have alt attributes + var images = document.GetElementsByTagName("img"); + foreach (Aspose.Html.Dom.Element node in images) + { + var img = node as Aspose.Html.HTMLImageElement; + if (img != null) + { + string alt = img.GetAttribute("alt"); + if (string.IsNullOrWhiteSpace(alt)) + { + string autoAlt = "Auto-generated alt text"; + img.SetAttribute("alt", autoAlt); + } + } + } + + // 2. Insert a new image before the second paragraph + var paragraphs = document.GetElementsByTagName("p"); + if (paragraphs.Length >= 2) + { + var newImg = (Aspose.Html.HTMLImageElement)document.CreateElement("img"); + newImg.SetAttribute("src", "https://example.com/inserted.png"); + newImg.SetAttribute("alt", "Inserted image"); + Aspose.Html.Dom.Element secondParagraph = (Aspose.Html.Dom.Element)paragraphs[1]; + secondParagraph.ParentNode.InsertBefore(newImg, secondParagraph.NextSibling); + } + + // 3. Add a watermark div (DOM overlay) + var div = document.CreateElement("div"); + div.SetAttribute("style", "position:absolute; top:10px; left:10px; font-size:24px; color:red; background:transparent;"); + div.TextContent = "Watermark"; + document.Body.AppendChild(div); + + // Save the modified HTML + string modifiedHtmlPath = Path.Combine(outputDir, "modified.html"); + document.Save(modifiedHtmlPath); + + // 4. Convert the document to JPEG using a custom stream provider + var imageOptions = new Aspose.Html.Saving.ImageSaveOptions(Aspose.Html.Rendering.Image.ImageFormat.Jpeg); + using (var provider = new MemoryStreamProvider()) + { + Aspose.Html.Converters.Converter.ConvertHTML(document, imageOptions, provider); + + if (provider.Streams.Count > 0) + { + var memory = provider.Streams[0]; + memory.Seek(0, SeekOrigin.Begin); + string jpegPath = Path.Combine(outputDir, "output.jpg"); + using (var fs = File.Create(jpegPath)) + { + memory.CopyTo(fs); + } + } + } + + Console.WriteLine("Processing completed successfully."); + Console.WriteLine($"Modified HTML saved to: {modifiedHtmlPath}"); + Console.WriteLine($"JPEG image saved to: {Path.Combine(outputDir, "output.jpg")}"); + } + catch (Exception ex) + { + Console.WriteLine("An error occurred:"); + Console.WriteLine(ex.Message); + } + } +} \ No newline at end of file diff --git a/web-accessibility/call_validationresult_savetostring_obtain_formatted_string_errors_warnings.cs b/web-accessibility/call_validationresult_savetostring_obtain_formatted_string_errors_warnings.cs new file mode 100644 index 0000000..66548c1 --- /dev/null +++ b/web-accessibility/call_validationresult_savetostring_obtain_formatted_string_errors_warnings.cs @@ -0,0 +1,58 @@ +// Call ValidationResult.SaveToString to obtain a formatted string of errors and warnings. + +using System; +using System.IO; + +class Program +{ + static void Main() + { + try + { + string htmlContent = "Test"; + string tempFile = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFile, htmlContent); + + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(tempFile)) + { + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult detail in validationResult.Details) + { + if (!detail.Success) + { + Console.WriteLine(detail.Rule.Code + ": " + detail.Rule.Description); + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in detail.Errors) + { + Aspose.Html.Accessibility.IError error = techResult.Error; + Console.WriteLine("Error: " + error.ErrorMessage); + if (error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Aspose.Html.HTMLElement element = (Aspose.Html.HTMLElement)error.Target.Item; + Console.WriteLine("Element HTML: " + element.OuterHTML); + } + } + } + } + } + else + { + Console.WriteLine("Document passed accessibility validation."); + } + } + + if (File.Exists(tempFile)) + { + File.Delete(tempFile); + } + } + catch (Exception ex) + { + Console.WriteLine("An error occurred: " + ex.Message); + } + } +} \ No newline at end of file diff --git a/web-accessibility/check_missing_track_elements_kind_captions_in_video_tags_using_validation_report.cs b/web-accessibility/check_missing_track_elements_kind_captions_in_video_tags_using_validation_report.cs new file mode 100644 index 0000000..9377239 --- /dev/null +++ b/web-accessibility/check_missing_track_elements_kind_captions_in_video_tags_using_validation_report.cs @@ -0,0 +1,55 @@ +// Check for missing elements with kind="captions" in video tags using the validation report. + +using System; + +class Program +{ + static void Main() + { + try + { + // Sample HTML containing an image without an alt attribute (accessibility issue) + string htmlContent = "Sample"; + + // Load HTML content into a document (base URL can be empty for this example) + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(htmlContent, "")) + { + // Initialize WebAccessibility and create a validator that checks all rules + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Perform validation + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in ruleResult.Errors) + { + if (techResult.Error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Aspose.Html.HTMLElement element = (Aspose.Html.HTMLElement)techResult.Error.Target.Item; + string tagName = element.TagName; + // Retrieve the attribute value (e.g., "alt") if present + string attributeValue = element.GetAttribute("alt"); + Console.WriteLine($"Tag: {tagName}, Attribute: {attributeValue ?? "(null)"}, Message: {techResult.Error.ErrorMessage}"); + } + } + } + } + } + else + { + Console.WriteLine("Document passed accessibility validation."); + } + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/combine_validation_findings_with_seo_metrics_to_identify_pages_with_accessibility_and_ranking_issues.cs b/web-accessibility/combine_validation_findings_with_seo_metrics_to_identify_pages_with_accessibility_and_ranking_issues.cs new file mode 100644 index 0000000..f163736 --- /dev/null +++ b/web-accessibility/combine_validation_findings_with_seo_metrics_to_identify_pages_with_accessibility_and_ranking_issues.cs @@ -0,0 +1,79 @@ +// Combine validation findings with SEO metrics to identify pages with both accessibility and ranking issues. + +using System; +using System.Collections.Generic; +using System.IO; + +class Program +{ + static void Main() + { + try + { + // Create a minimal sample HTML file + string samplePath = Path.Combine(Directory.GetCurrentDirectory(), "sample.html"); + if (!File.Exists(samplePath)) + { + File.WriteAllText(samplePath, + "Sample" + + "Sample image"); + } + + // List of URLs (using the local file path for simplicity) + List urls = new List { samplePath, samplePath }; + + // Output directory for validation results + string outputDir = Path.Combine(Directory.GetCurrentDirectory(), "ValidationResults"); + Directory.CreateDirectory(outputDir); + + // Initialize WebAccessibility and a validator that checks all rules + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = + webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + int index = 1; + foreach (string url in urls) + { + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(url)) + { + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + // Save the validation result as XML + string outputPath = Path.Combine(outputDir, $"validation_result_{index}.xml"); + File.WriteAllText(outputPath, validationResult.ToString()); + + // Output detailed errors to the console + if (!validationResult.Success) + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in ruleResult.Errors) + { + Aspose.Html.Accessibility.IError error = techResult.Error; + if (error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Aspose.Html.HTMLElement element = (Aspose.Html.HTMLElement)error.Target.Item; + string tagName = element.TagName; + string altValue = element.GetAttribute("alt"); + Console.WriteLine($"Tag: {tagName}, Attribute (alt): {altValue}, Message: {error.ErrorMessage}"); + } + else + { + Console.WriteLine(error.ErrorMessage); + } + } + } + } + } + } + index++; + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/compare_two_validationresult_objects_detect_regressions_after_modifying_html_content_same_project.cs b/web-accessibility/compare_two_validationresult_objects_detect_regressions_after_modifying_html_content_same_project.cs new file mode 100644 index 0000000..0dbbbf3 --- /dev/null +++ b/web-accessibility/compare_two_validationresult_objects_detect_regressions_after_modifying_html_content_same_project.cs @@ -0,0 +1,57 @@ +// Compare two ValidationResult objects to detect regressions after modifying HTML content in the same project. + +using System; +using System.IO; + +class Program +{ + static void Main() + { + try + { + // Prepare sample HTML file + string htmlContent = "Test

Sample

"; + string tempFile = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFile, htmlContent); + + // Initialize accessibility validator + var webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + var validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + var document = new Aspose.Html.HTMLDocument(tempFile); + var validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + foreach (var ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + Console.WriteLine($"{ruleResult.Rule.Code}: {ruleResult.Rule.Description}"); + foreach (var techResult in ruleResult.Errors) + { + var error = techResult.Error; + Console.WriteLine(error.ErrorMessage); + if (error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + var element = (Aspose.Html.HTMLElement)error.Target.Item; + Console.WriteLine(element.OuterHTML); + } + } + } + } + } + else + { + Console.WriteLine("Document passed accessibility validation."); + } + + // Clean up temporary file + if (File.Exists(tempFile)) + File.Delete(tempFile); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/configure_accessibilityvalidator_custom_settings_before_validating_html_document_application.cs b/web-accessibility/configure_accessibilityvalidator_custom_settings_before_validating_html_document_application.cs new file mode 100644 index 0000000..3d03470 --- /dev/null +++ b/web-accessibility/configure_accessibilityvalidator_custom_settings_before_validating_html_document_application.cs @@ -0,0 +1,78 @@ +// Configure an AccessibilityValidator with custom settings before validating an HTML document in the application. + +using System; +using System.IO; +using System.Text; + +class Program +{ + static void Main() + { + try + { + // Prepare a simple HTML file + string htmlContent = @" + + + Sample + + +

Hello World

+ Sample Image + +"; + string tempFilePath = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFilePath, htmlContent, Encoding.UTF8); + + // Initialize WebAccessibility and validator + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the HTML document + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(tempFilePath)) + { + // Perform validation + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (validationResult.Success) + { + Console.WriteLine("Accessibility validation succeeded. No issues found."); + } + else + { + Console.WriteLine("Accessibility validation failed. Details:"); + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in ruleResult.Errors) + { + // Print the error message + Console.WriteLine($"Error: {techResult.Error.ErrorMessage}"); + + // If the target is an HTML element, print additional info + if (techResult.Error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Aspose.Html.HTMLElement element = (Aspose.Html.HTMLElement)techResult.Error.Target.Item; + string tagName = element.TagName; + string idAttribute = element.GetAttribute("id"); + Console.WriteLine($" Element: <{tagName}> Id: {idAttribute}"); + } + } + } + } + } + } + + // Clean up temporary file + if (File.Exists(tempFilePath)) + { + File.Delete(tempFilePath); + } + } + catch (Exception ex) + { + Console.WriteLine($"An error occurred: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/configure_validator_ignore_selected_rule_codes_allowing_custom_compliance_thresholds_during_checks.cs b/web-accessibility/configure_validator_ignore_selected_rule_codes_allowing_custom_compliance_thresholds_during_checks.cs new file mode 100644 index 0000000..4819840 --- /dev/null +++ b/web-accessibility/configure_validator_ignore_selected_rule_codes_allowing_custom_compliance_thresholds_during_checks.cs @@ -0,0 +1,79 @@ +// Configure the validator to ignore selected rule codes, allowing custom compliance thresholds during checks. + +using System; +using System.IO; + +class Program +{ + static void Main() + { + try + { + // Sample HTML content + string htmlContent = "Test

Hello World

"; + + // Write the sample HTML to a temporary file + string tempFilePath = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFilePath, htmlContent); + + // Load the HTML document + var document = new Aspose.Html.HTMLDocument(tempFilePath); + + // Create WebAccessibility instance + var webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + + // Create a validator for all rules + var validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Validate the document + var validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + Console.WriteLine("Validation failed. Details:"); + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult detail in validationResult.Details) + { + Console.WriteLine($"Rule: {detail.Rule.Code} - {detail.Rule.Description} - Success: {detail.Success}"); + if (!detail.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in detail.Errors) + { + var target = techResult.Error.Target; + if (target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + var element = (Aspose.Html.HTMLElement)target.Item; + Console.WriteLine($" Element: <{element.TagName}> OuterHTML: {element.OuterHTML}"); + } + else + { + Console.WriteLine($" Target type: {target.TargetType}"); + } + } + } + } + } + else + { + Console.WriteLine("Validation succeeded with no errors."); + } + + // Example: Validate a specific guideline under a principle + var principle = webAccessibility.Rules.GetPrinciple("WCAG2AA"); + var guideline = principle.GetGuideline("1.1.1"); // Example guideline code + var validator2 = webAccessibility.CreateValidator(guideline, Aspose.Html.Accessibility.ValidationBuilder.All); + var validationResult2 = validator2.Validate(document); + if (!validationResult2.Success) + { + Console.WriteLine("Guideline validation failed."); + } + else + { + Console.WriteLine("Guideline validation succeeded."); + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/configure_validator_static_rule_repository_consistent_rule_application_across_runs.cs b/web-accessibility/configure_validator_static_rule_repository_consistent_rule_application_across_runs.cs new file mode 100644 index 0000000..fadb359 --- /dev/null +++ b/web-accessibility/configure_validator_static_rule_repository_consistent_rule_application_across_runs.cs @@ -0,0 +1,69 @@ +// Configure the validator to use a static rule repository for consistent rule application across runs. + +using System; +using System.IO; + +class Program +{ + static void Main() + { + try + { + // Prepare a simple HTML content and save it to a temporary file + string htmlContent = @" + + + Sample Page + + +

Hello, Aspose.HTML!

+

This is a sample HTML document for accessibility validation.

+ +"; + + string tempFilePath = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFilePath, htmlContent); + + // Initialize WebAccessibility and create a validator for all rules + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the HTML document + Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(tempFilePath); + + // Perform validation + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + // Output validation results + if (!validationResult.Success) + { + Console.WriteLine("Accessibility validation failed. Details:"); + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult detail in validationResult.Details) + { + string ruleCode = detail.Rule?.Code ?? "N/A"; + string ruleDescription = detail.Rule?.Description ?? "No description"; + Console.WriteLine($"Rule: {ruleCode}"); + Console.WriteLine($"Description: {ruleDescription}"); + Console.WriteLine($"Success: {detail.Success}"); + Console.WriteLine(new string('-', 40)); + } + } + else + { + Console.WriteLine("Accessibility validation succeeded. No issues found."); + } + + // Clean up + document.Dispose(); + // Optionally delete the temporary file + if (File.Exists(tempFilePath)) + { + File.Delete(tempFilePath); + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/configure_validator_treat_caption_missing_warnings_as_errors_adjust_severity_settings.cs b/web-accessibility/configure_validator_treat_caption_missing_warnings_as_errors_adjust_severity_settings.cs new file mode 100644 index 0000000..9be2bab --- /dev/null +++ b/web-accessibility/configure_validator_treat_caption_missing_warnings_as_errors_adjust_severity_settings.cs @@ -0,0 +1,45 @@ +// Configure the validator to treat caption missing warnings as errors by adjusting severity settings. + +using System; +using System.IO; +using System.Text; + +class Program +{ + static void Main() + { + try + { + string html = "Test

Hello

"; + + using (var document = new Aspose.Html.HTMLDocument(new MemoryStream(Encoding.UTF8.GetBytes(html)), "")) + { + var webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + var validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + var validationResult = validator.Validate(document); + + if (validationResult.Success) + { + Console.WriteLine("Document passed accessibility validation."); + } + else + { + foreach (var ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (var techResult in ruleResult.Errors) + { + Console.WriteLine(techResult.Error.ErrorMessage); + } + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/create_custom_rule_subset_selecting_specific_wcag_criteria_from_accessibilityrules_before_validation.cs b/web-accessibility/create_custom_rule_subset_selecting_specific_wcag_criteria_from_accessibilityrules_before_validation.cs new file mode 100644 index 0000000..e00f468 --- /dev/null +++ b/web-accessibility/create_custom_rule_subset_selecting_specific_wcag_criteria_from_accessibilityrules_before_validation.cs @@ -0,0 +1,91 @@ +// Create a custom rule subset by selecting specific WCAG criteria from AccessibilityRules before validation. + +using System; +using System.IO; + +class Program +{ + static void Main() + { + try + { + // Prepare a minimal HTML file + string htmlContent = "Test

Hello

"; + string inputPath = Path.Combine(Directory.GetCurrentDirectory(), "sample.html"); + File.WriteAllText(inputPath, htmlContent); + + // Create WebAccessibility instance + var webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + + // Create validator with all rules + var validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the document and validate + using (var document = new Aspose.Html.HTMLDocument(inputPath)) + { + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (!validationResult.Success) + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in ruleResult.Errors) + { + if (techResult.Error.Target.TargetType == Aspose.Html.Accessibility.TargetTypes.HTMLElement) + { + Console.WriteLine(techResult.Error.ErrorMessage); + } + } + } + } + } + else + { + Console.WriteLine("Document passed accessibility validation."); + } + } + + // Retrieve a specific principle, guideline, and criterion + // Example codes are illustrative; replace with actual codes as needed + string principleCode = "Principle1"; + string guidelineCode = "Guideline1"; + string criterionCode = "Criterion1"; + + Aspose.Html.Accessibility.Principle principle = webAccessibility.Rules.GetPrinciple(principleCode); + if (principle != null) + { + Aspose.Html.Accessibility.Guideline guideline = principle.GetGuideline(guidelineCode); + if (guideline != null) + { + Aspose.Html.Accessibility.Criterion criterion = guideline.GetCriterion(criterionCode); + if (criterion != null) + { + Console.WriteLine("{0}:{1} - {2}", criterion.Code, criterion.Description, criterion.Level); + foreach (Aspose.Html.Accessibility.IRule technique in criterion.SufficientTechniques) + { + Console.WriteLine("{0}:{1}", technique.Code, technique.Description); + } + } + else + { + Console.WriteLine("Criterion not found."); + } + } + else + { + Console.WriteLine("Guideline not found."); + } + } + else + { + Console.WriteLine("Principle not found."); + } + } + catch (Exception ex) + { + Console.WriteLine("Error: " + ex.Message); + } + } +} \ No newline at end of file diff --git a/web-accessibility/create_static_accessibilityvalidator_instance_and_reuse_to_validate_multiple_html_files_efficiently.cs b/web-accessibility/create_static_accessibilityvalidator_instance_and_reuse_to_validate_multiple_html_files_efficiently.cs new file mode 100644 index 0000000..c20f67f --- /dev/null +++ b/web-accessibility/create_static_accessibilityvalidator_instance_and_reuse_to_validate_multiple_html_files_efficiently.cs @@ -0,0 +1,50 @@ +// Create a static AccessibilityValidator instance and reuse it to validate multiple HTML files efficiently. + +using System; + +class Program +{ + static void Main() + { + try + { + // Prepare a simple HTML file for validation + string htmlPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "sample.html"); + string htmlContent = "Test"; + System.IO.File.WriteAllText(htmlPath, htmlContent); + + // Initialize accessibility validator + var webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + var validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the document and perform validation + using (var document = new Aspose.Html.HTMLDocument(htmlPath)) + { + var validationResult = validator.Validate(document); + + if (validationResult.Success) + { + Console.WriteLine("Document passed accessibility validation."); + } + else + { + foreach (var ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (var techResult in ruleResult.Errors) + { + var error = techResult.Error; + Console.WriteLine(error.ErrorMessage); + } + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/create_validator_instance_using_createvalidator_before_loading_html_document_for_accessibility.cs b/web-accessibility/create_validator_instance_using_createvalidator_before_loading_html_document_for_accessibility.cs new file mode 100644 index 0000000..7d3a59e --- /dev/null +++ b/web-accessibility/create_validator_instance_using_createvalidator_before_loading_html_document_for_accessibility.cs @@ -0,0 +1,57 @@ +// Create a validator instance using CreateValidator() before loading any HTML document for accessibility. + +using System; +using System.IO; +using System.Text; + +class Program +{ + static void Main() + { + try + { + // Create a simple HTML file for validation + string htmlContent = "Test

Hello World

"; + string tempFilePath = Path.Combine(Path.GetTempPath(), "sample.html"); + File.WriteAllText(tempFilePath, htmlContent, Encoding.UTF8); + + // Initialize accessibility validator + Aspose.Html.Accessibility.WebAccessibility webAccessibility = new Aspose.Html.Accessibility.WebAccessibility(); + Aspose.Html.Accessibility.AccessibilityValidator validator = webAccessibility.CreateValidator(Aspose.Html.Accessibility.ValidationBuilder.All); + + // Load the HTML document and perform validation + using (Aspose.Html.HTMLDocument document = new Aspose.Html.HTMLDocument(tempFilePath)) + { + Aspose.Html.Accessibility.Results.ValidationResult validationResult = validator.Validate(document); + + if (validationResult.Success) + { + Console.WriteLine("Document passed accessibility validation."); + } + else + { + foreach (Aspose.Html.Accessibility.Results.RuleValidationResult ruleResult in validationResult.Details) + { + if (!ruleResult.Success) + { + foreach (Aspose.Html.Accessibility.ITechniqueResult techResult in ruleResult.Errors) + { + Console.WriteLine(techResult.Error.ErrorMessage); + } + } + } + } + } + + // Clean up temporary file + if (File.Exists(tempFilePath)) + { + File.Delete(tempFilePath); + } + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } +} \ No newline at end of file diff --git a/web-accessibility/detect_absent_caption_files_referenced_by_track_elements_log_file_paths.cs b/web-accessibility/detect_absent_caption_files_referenced_by_track_elements_log_file_paths.cs new file mode 100644 index 0000000..921a6fd --- /dev/null +++ b/web-accessibility/detect_absent_caption_files_referenced_by_track_elements_log_file_paths.cs @@ -0,0 +1,93 @@ +// Detect absent caption files referenced by elements and log their file paths. + +using System; +using System.IO; +using System.Collections.Generic; +using Aspose.Html; +using Aspose.Html.Dom; +using Aspose.Html.Dom.XPath; +using Aspose.Html.Collections; + +class Program +{ + static void Main() + { + try + { + // Paths + string logPath = "log.txt"; + string inputPath = "input.html"; + string outputPath = "output.html"; + + // Create a minimal sample HTML file if it does not exist + if (!File.Exists(inputPath)) + { + string sampleHtml = @" + +Sample + + + + + +"; + File.WriteAllText(inputPath, sampleHtml); + } + + // Load document + Aspose.Html.HTMLDocument doc = new Aspose.Html.HTMLDocument(inputPath); + + // Log all image src attributes using XPath + Aspose.Html.Dom.XPath.IXPathResult result = doc.Evaluate( + "//img", + doc, + doc.CreateNSResolver(doc), + Aspose.Html.Dom.XPath.XPathResultType.Any, + null); + + Aspose.Html.Dom.Node node; + while ((node = result.IterateNext()) != null) + { + Aspose.Html.HTMLImageElement img = node as Aspose.Html.HTMLImageElement; + if (img != null) + { + File.AppendAllText(logPath, img.Src + Environment.NewLine); + } + } + + // Remove all