2

我发现有一个用于 W3C Markup Validator 的 API

我之前问过: W3C 标记验证器 API 是否有 .NET 库?

阿萨夫回答

此 API 基于 SOAP。如果您想在 .net 应用程序中使用它,您只需添加 Web 引用和针对它的代码。看起来很简单,因为它基本上是一个单一方法的 API ......

所以,我尝试在地址“添加服务参考” http://validator.w3.org/check

首先对话框显示:

请等待下载服务信息...

然后:

尝试在“ http://validator.w3.org/check ”中查找服务时发生错误...

Visual Studio 添加服务参考对话框 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: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 标记验证器 API?

4

4 回答 4

3

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

于 2011-03-25T13:25:43.763 回答
2

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

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

如果有人知道:

  1. 一种无需 WSDL 或...
  2. W3C Validator 的 WSDL 文件在哪里...

那么请告诉我...

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

于 2009-08-02T09:02:33.260 回答
1

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

用必应四处寻找和搜索,我发现了以下内容:http ://www.w3.org/Search/Mail/Public/search?type-in​​dex=www-validator&index-type=t&keywords=wsdl&search=Search

祝你好运。似乎他们在这方面做得有点倒退,因为 Web 服务是那些不太了解 WSDL 概念的人事后才想到的。

于 2009-08-03T01:43:14.437 回答
0

您实际上可以从https://github.com/validator/validator下载验证器并将其安装到您自己的站点上

关于页面的一些有用说明

我通过调用创建了一个快速的 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 结果。

于 2017-08-02T08:49:44.447 回答