2011-10-24 26 views
1

我需要看看HTML页面标记是否在源代码中包含了谷歌分析,在脚本块中,以及脚本块是否在<title>标记之上。什么是正确的方式来查找JavaScript标记并确定它是否位于标题标签之上?

我已经设法将网页的源代码放入一个变量中。

我挣扎写正确的正则表达式来拉出的代码谷歌分析部分,以了解是否首先它是目前其次是,JavaScript是一种标记之前!

有什么建议吗?

+0

我希望,你是不是想用正则表达式解析HTML? –

+0

什么是正确的方法来做到这一点? –

+0

使用一些html解析器(例如HtmlAgilityPack)来执行此操作。 –

回答

3

避免使用正则表达式来解析html;有太多的陷阱。假设您在文档中搜索字符串“< title”。如果您没有找到“< TITLE”,该怎么办?好的,容易做到不区分大小写的匹配。但是......如果评论中嵌入了“<标题”字符串呢?如果在脚本块中嵌入了这样的字符串会怎样?等等

HTML文档的任何“搜索”需要做的不仅仅是文本搜索。它需要文件意识。这就是HtmlAgilityPack提供的。这是一个免费下载。

开始是这样的:

using HtmlAgilityPack; 
    .... 

    HtmlDocument doc = new HtmlDocument(); 
    doc.Load(fileName); 
    var titles = doc.DocumentNode.SelectNodes("/html/head/title"); 
    if (titles != null) 
    { 
     foreach(var title in titles) 
     { 
      Console.WriteLine("<title> on line: " + title.Line); 
     } 
     var scripts = doc.DocumentNode.SelectNodes("/html/head/script"); 
     if (scripts != null) 
     { 
      foreach(var script in scripts) 
      { 
       Console.WriteLine("<script> on line: " + script.Line); 
       // here, you need to decide if the script is before the title 
       // and if it is the "right" script - google analytics. 
       // you have to do that part yourself. 
      } 
     } 
     else 
     { 
      Console.WriteLine("No script nodes found."); 
     } 
    } 
    else 
    { 
     Console.WriteLine("No title node found."); 
    } 
+0

这是伟大的! –

相关问题