我如何在.NET应用程序中使用W3C Markup Validator API?

时间:2009-03-05 14:58:11

标签: .net visual-studio api soap w3c

我发现有API for the W3C Markup Validator

我之前曾问过:Is there a .NET library for the W3C Markup Validator API?

Assafanswer

  

此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;字符集= 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:www-validator@w3.org" />
<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?

4 个答案:

答案 0 :(得分:3)

W3C服务不是标准的SOAP服务!它可以提供SOAP格式的响应,但要将其称为基于REST的基于URL的服务 http://validator.w3.org/check?uri=YourURLToProof&charset=utf-8&output=soap12

答案 1 :(得分:2)

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

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

如果有人知道:

  1. 在没有WSDL或......的情况下使Web引用工作的方法
  2. W3C Validator的WSDL文件是......
  3. 然后请让我知道......

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

答案 2 :(得分:1)

SOAP Web服务必须具有WSDL。我在W3C网站上看到过SOAP API的一些提及,但API或WSDL的位置并不明显。

在Bing上搜索并搜索,我找到了以下内容:http://www.w3.org/Search/Mail/Public/search?type-index=www-validator&index-type=t&keywords=wsdl&search=Search

祝你好运。看起来他们已经做了一点倒退,Web服务是那些不太了解WSDL概念的人的事后想法。

答案 3 :(得分:0)

您可以从https://github.com/validator/validator

实际下载验证程序并将其安装到您自己的网站上

about page

中的一些有用说明

我通过调用https://validator.w3.org/nu/?doc=http://www.example.com&out=json

制作了一个快速的c#验证器方法 像这样:

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结果。