The W3C has introduced an API for their HTML Validator. It is not a SOAP web service, but it does return XML that can be parsed, so now you have the ability to incorporate validation to any web application, Windows program or wherever you want. It works just as the normal validator, by specifying a URL, but you have to add the “output=soap12” parameter to the URL like so: http://validator.w3.org/check?uri=http://www.google.com&output=soap12.

I’ve been playing a little with the possibilities and created a class that encapsulates the validation process and wraps the results up in a suitable class. The collection of errors and warnings can be bound directly to a GridView or Repeater without additional code. This gives you a very easy, but powerful way of dealing with the validator.

Examples of use

Even thought the class is very small and its functionality limited, it still gives you all the relevant information from the validation. Here’s an example of some of the possibilities of the class.

using (HtmlValidator val = new HtmlValidator("http://www.google.com"))

{

  if (!val.Validate())

  {

    grid.DataSource = val.Errors; // or val.Warnings

    grid.DataBind();

    lbDoctype.Text = val.Doctype;

    lbCharset.Text = val.Charset.BodyName;

 

    foreach (HtmlValidator.ValidationError error in val.Errors)

    {

      DoSomething(error.Message, error.LineNumber, error.ColumnIndex);

    }

  }
}

Implementation

Download HtmlValidator.cs below and add it to any C# project. If you want to use it in an ASP.NET project, just put it in the App_Code folder.

Download

HtmlValidator.zip (1,43 KB)

One of the nicest things about the new anonymous methods is how simple event handling has become. Here is an example of how we used to handle events. It demonstrates how to add an event handler to the btnSave’s Click event and assign a method to handle it.

protected void Page_Load(object sender, EventArgs e)

{

  btnSave.Click += new EventHandler(btnSave_Click);

}

 

void btnSave_Click(object sender, EventArgs e)

{

  DoSomething();
}

The next approach uses anonymous method to do exactly the same thing.

protected void Page_Load(object sender, EventArgs e)

{

  btnSave.Click += delegate { DoSomething(); };
}

This will save a lot of code lines.