2009-03-05 47 views
1

我发现有一个API for the W3C Markup Validator如何在我的.NET应用程序中使用W3C标记验证器API?

我刚才问:Is there a .NET library for the W3C Markup Validator API?

Assafanswer

这个API是基于SOAP。如果你想 在.net应用程序中使用它,你可以只添加网站引用和代码 。似乎很简单,因为 它基本上是一个包含一个方法的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标记验证器API?

回答

2

为了让Web引用起作用,我认为它需要服务的所有者发布.Net的WSDL文件来读取和创建本地对象。然后在项目中调用这些本地对象,并使用SOAP填充来自服务另一端的数据。

我一直在寻找一个WSDL文件,它描述了W3C在他们的网站上验证SOAP的地方,但到目前为止没有运气。在W3C管理WSDL协议的情况下,这很奇怪。你真的希望他们使用它!

如果有人知道:

  1. 一种方式来获得一个Web引用工作没有WSDL或...
  2. 凡W3C验证的WSDL文件...

,那么请让我知道...

如果失败 - W3C已经在他们的网站上放置了一个到C#库的链接(http://validator.w3.org/docs/api.html#libs),这很容易下载和构建。但是,它使用LINQ来构建一个基于W3C返回的SOAP的对象 - 这对我来说似乎有点沉重......如果没有别的东西,这是一个有用的起点。

0

实际上,你可以下载到自己的网站从https://github.com/validator/validator

一些有用的笔记从about page

安装验证我做了一个快速C#验证方法与调用: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结果。

相关问题