1

可能重复:
正则表达式匹配打开的标签,XHTML 自包含标签除外

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

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

如何检查重复的 ID 名称?

4

2 回答 2

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();
于 2012-09-21T14:24:18.000 回答
3

正则表达式可能有效,但前提是 HTML非常规则。例如,如果您不能确定这些input标签上属性的数量、类型、格式和顺序,那么用于检索您想要的信息的基于正则表达式的解决方案充其量将是笨拙的,也许是行不通的。

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

HtmlDocument doc;
var inputTags = doc.DocumentNode.Descendants("input");
var ids = inputTags.Select(x=>x.Attributes["id"]);
于 2012-09-21T14:25:05.830 回答