检查HTML代码中的重复ID

时间:2012-09-21 14:16:17

标签: c# html

  

可能重复:
  RegEx match open tags except XHTML self-contained tags

我有一个包含此HTML标记的字符串:

string markup = @"
  <html>
    <head>
      ...
    </head>
    <body>
      <input id='text1' />
      <input id='blah' />
      <input id='text1' />
    </body>
  </html>
";

如何检查重复的ID名称?

2 个答案:

答案 0 :(得分:3)

HtmlAgilityPack

的帮助下
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(markup);

var dups = doc.DocumentNode.Descendants()
    .Where(n => n.Attributes["id"] != null)
    .GroupBy(n => n.Attributes["id"].Value)
    .Select(g => new { ID = g.Key, Count = g.Count() })
    .Where(r=>r.Count>1)
    .ToList();

答案 1 :(得分:3)

正则表达式可能有效,但前提是HTML 非常常规。例如,如果您无法确定这些input标记上的属性的数量,类型,格式和顺序,那么检索所需信息的基于正则表达式的解决方案将变得难以处理最好的,也许是行不通的。

最好使用HTML Agility Pack。它将为您解析HTML并吐出表示文档结构的树。然后你可以遍历它寻找input标签并抓住他们的id,如果有的话:

HtmlDocument doc;
var inputTags = doc.DocumentNode.Descendants("input");
var ids = inputTags.Select(x=>x.Attributes["id"]);