|
2007/08/15(Wed) 09:05:22 編集(投稿者) 2007/08/15(Wed) 08:58:19 編集(投稿者) 2007/08/15(Wed) 08:58:05 編集(投稿者)
最終的に作りたかったのは
HtmlElementCollection x = GetsElementsByTagNameAndTag("<DIV class=hoge">);
のようなことをしたかったのです。現在は
HtmlElement[] x = GetsElementsByTagNameAndTag("<DIV class=hoge">);
どちらでも同じなんですが、HtmlElementCollectionにしたほうが、 ・他のメソドの結果であるHtmlElementCollectionと統一できてソースが理解しやすいこと ・そしてその結果を、HtmlElementCollectionを引数としてもつ単一の関数に共通して渡すことができること ・HtmlElement[]とちがいHtmlElementCollectionであるほうが、各要素が同一documentに属することが自然に保障できること という理由です。 絶対にないと困るわけではありません。
参考までに、つくった処理
static private HtmlElement[] GetsElementsByTagNameAndTag( HtmlElement hec, string tag ) { List<HtmlElement> results = new List<HtmlElement>(); string key = "<(.+?) (.+?)=(.+?)>"; System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex( key, System.Text.RegularExpressions.RegexOptions.IgnoreCase ); System.Text.RegularExpressions.Match m = regex.Match( tag.ToLower() ); if( m.Success ) { foreach( HtmlElement elm in hec.GetElementsByTagName( m.Groups[1].Value ) ) { if( elm.GetAttribute( m.Groups[2].Value ) == m.Groups[3].Value || (m.Groups[2].Value == "class" && elm.GetAttribute( "className" ) == m.Groups[3].Value) ) { results.Add( elm ); } } } return results.ToArray(); }
|