代码之家  ›  专栏  ›  技术社区  ›  Zack Peterson

如何在.NET应用程序中使用W3C标记验证器API?

  •  1
  • Zack Peterson  · 技术社区  · 16 年前

    我发现有一个 API for the W3C Markup Validator 是的。

    我之前问过: 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;字符集=utf-8 的响应消息不匹配 绑定的内容类型 (应用程序/soap+xml;字符集=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 回复  |  直到 8 年前
        1
  •  3
  •   Manfred    14 年前

    w3c服务不是标准的soap服务!它可以给出一个soap格式的响应,但是调用它是一个基于sinple rest url的服务 http://validator.w3.org/check?uri=YourURLToProof&charset=utf-8&output=soap12

        2
  •  2
  •   Dave GerrardDave Gerrard    16 年前

    为了让web引用工作,我认为它需要服务的所有者发布一个wsdl文件供.net读取和创建本地对象。然后在项目中调用这些本地对象,然后使用soap从服务的另一端向它们填充数据。

    我一直在寻找一个wsdl文件,该文件描述了w3c在其站点上的验证soap,但到目前为止还没有成功。考虑到w3c管理wsdl协议,这很奇怪。你真希望他们用它!

    如果有人知道:

    1. 一种在没有wsdl或…
    2. w3c验证器的wsdl文件在哪里…

    那么请让我知道…

    失败-W3C在他们的站点上放置了一个指向C库的链接( http://validator.w3.org/docs/api.html#libs ,这很容易下载和构建。但这使用linq构建了一个基于w3c返回的soap的对象,这对我来说有点沉重……这是一个有用的起点,如果没有其他。

        3
  •  1
  •   John Saunders    16 年前

    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概念的人的事后考虑。

        4
  •  0
  •   James John McGuire 'Jahmic'    8 年前

    实际上,您可以从 https://github.com/validator/validator

    一些有用的笔记 about page

    我快速调用了一个c 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结果。