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

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