2012-09-21 55 views
1

可能重复:
RegEx match open tags except XHTML self-contained tags检查重复的ID在HTML代码

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

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

我如何检查重复的ID名称?

+0

你必须阅读[除XHTML自足标签的正则表达式匹配开放标签(http://stackoverflow.com/ q/1732348) – CharlesB

+0

你不应该使用这个正则表达式 –

+1

我被拒绝了,因为我需要帮助的问题?我没有试图解析整个标记。我只是在寻找一种id =“sameid”的模式。仍然不可能?我确实阅读过上面的链接。 – Rod

回答

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(); 
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"]);