2009-03-05 21 views
1

API for the W3C Markup Validatorが見つかりました。.NETアプリケーションでW3C Markup Validator APIを使用するにはどうすればよいですか?

私は以前求めていた:Is there a .NET library for the W3C Markup Validator API?

Assafさんanswer

このAPIは、SOAPベースです。 を.netアプリケーションで使用したい場合は、 をWeb参照とコード に追加してください。だから、

...それは基本的に一法のAPIです として十分な簡単なようだ、私はアドレスhttp://validator.w3.org/checkで「サービス参照の追加」してみました。

最初のダイアログが表示されます。

をダウンロードすることが にサービス情報を待ってください...

その後

: をしようとしたときに、

エラーが発生しました... のサービスを探すには 'http://validator.w3.org/check'

Visual Studio Add Service Reference Dialog http://img17.imageshack.us/img17/719/addservicereference.gif

エラーの詳細:

HTMLドキュメントは、Web サービスディスカバリ情報が含まれていません。 メタデータには、 を解決できない参照が含まれています。 'http://validator.w3.org/check'です。 コンテンツタイプtext/html;レスポンスメッセージのcharset = utf-8 が バインディングのコンテンツタイプと一致しません (application/soap + xml; charset = utf-8)。 カスタムエンコーダを使用する場合は、 のIsContentTypeSupportedメソッド が正しく実装されていることを確認してください。応答の最初 1024バイトであった:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
<title> 

     Validation Results - W3C Markup Validator</title> 
    <link rel="icon" href="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%02%00%00%00%90%91h6%00%00%00%19IDAT(%91c%BCd%AB%C2%40%0A%60%22I%F5%A8%86Q%0DCJ%03%00%DE%B5%01S%07%88%8FG%00%00%00%00IEND%AEB%60%82" type="image/png" /> 
<link rev="made" href="mailto:[email protected]" /> 
<link rev="start" href="./" title="Home Page" /> 
<style type="text/css" media="all">@import "./style/base.css"; 
     @import "./style/results.css";</style> 
<meta name="keywords" content="HTML, HyperText Markup Language, Validation, 
    W3C Markup Validation Service" /> 
<meta name="description" content="W3C's easy-to-use 
    H 

サービスが 現在のソリューションで定義されている場合、 ソリューションを構築し、再びサービス 参照を追加してみてください。

.NETアプリケーションでW3C Markup Validator APIを使用するにはどうすればよいですか?

答えて

2

Web参照が機能するには、.Netがローカルオブジェクトを読み込んで作成するためのWSDLファイルを公開している必要があります。プロジェクト内でこれらのローカルオブジェクトを呼び出すと、SOAPを使用してサービスのもう一方の端からデータが移入されます。

私はW3Cの検証SOAPをサイトのどこかに記述したWSDLファイルを探していましたが、これまでのところ運がありません。 W3CがWSDLプロトコルを管理することを考えると、これは奇妙です。あなたは本当にそれらを使用することを期待していた!

誰もが知っている場合:

  1. 方法は聞かせてくださいそして、W3C ValidatorのWSDLファイルがある
  2. ...

をWSDLせずに作業Web参照を取得したり...します私は知っている...

W3Cは、自分のサイト(http://validator.w3.org/docs/api.html#libs)にC#ライブラリへのリンクを張っていますが、ダウンロードしてビルドするのは簡単です。しかし、それはW3Cから返されたSOAPに基づいてオブジェクトを構築するためにLINQを使用しています。これは私の目的にとっては少し重いようです...他に何もないのなら、それは有用な出発点です。

1

SOAP WebサービスにはWSDLが必要です。私はSOAP APIのW3Cサイトでいくつかの言及を見ましたが、APIまたはWSDLの場所は明らかではありません。 http://www.w3.org/Search/Mail/Public/search?type-index=www-validator&index-type=t&keywords=wsdl&search=Search

幸運:チャンスをうかがっとビングで検索

は、私は、次を発見しました。 Webサービスは、WSDLのコンセプトをあまり得意としていない人たちからの補足事項です。

2

だ呼び出すことが、それはSOAPフォーマットされた応答を与えることができます。

0

あなたは実際に私が呼び出しからの迅速なC#のバリ方法を作っabout page

からhttps://github.com/validator/validator

いくつかの有用なノートから自分のサイトへの上のバリデータをダウンロードしてインストールすることができます:https://validator.w3.org/nu/?doc=http://www.example.com&out=json

ようなので、 :

using Newtonsoft.Json; 
using System.Net; 
using System.Net.Http; 

private void ValidateFromW3Org(string url) 
{ 
    HttpClientHandler clientHandler = new HttpClientHandler(); 
    HttpClient client = new HttpClient(clientHandler); 
    client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", 
      "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); 

    string validator = string.Format(
     "http://validator.w3.org/nu/?doc={0}&out=json", url); 

    string response = client.GetStringAsync(url).Result; 

    PageValidationResult pageResults = JsonConvert.DeserializeObject< 
     PageValidationResult>(response); 
    IList<ValidationResult> results = pageResults.Messages; 

    foreach(ValidationResult result in results) 
    { 
     Console.WriteLine("{0}:{1} line: {2} - {3}", result.Type, 
      result.SubType, result.LastLine, result.Message); 
    } 
} 

public class ValidationResult 
{ 
    public string Type { get; set; } 
    public string SubType { get; set; } 
    public int LastLine { get; set; } 
    public int FirstColumn { get; set; } 
    public int LastColumn { get; set; } 
    public string Message { get; set; } 
    public string Extract { get; set; } 
    public int HiliteStart { get; set; } 
    public int HiliteLength { get; set; } 
} 

public class PageValidationResult 
{ 
    public string Url { get; set; } 
    public IList<ValidationResult> Messages { get; set; } 
} 

これは単なるサンプルであることにご注意ください。そのような方法でHttpClientを再利用することは望ましくありません。これはまた、第三者のNewtonsoft.Jsonを使用してjsonの結果を解析します。

関連する問題