C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: HtmlElementCollectionni


(過去ログ 17 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■6463 / inTopicNo.1)  HtmlElementCollectionni
  
□投稿者/ らじゃ (1回)-(2007/08/14(Tue) 21:23:27)

分類:[.NET 全般] 

HtmlElement[]型

あるいは

List<HtmlElement>型

という形で複数のHtmlElementがあるときに、これをHtmlElementCollection型にする方法は存在するでしょうか?
(もちろん、各要素のHtmlElementは、同一のdocumentに存在するという条件で。)


私の知る限りでは、HtmlElementCollectionはGetElementsByTagNameなどの戻り値として得るしか方法がなく、HtmlElementCollectionクラス自身には要素を操作するメソッドや、新規に内容を設定できるようなコンストラクタがありません。
別のクラスのメソッドなどで変換できるのではと探しましたが、これも発見できませんでした。

よろしくお願いいたします。


引用返信 編集キー/
■6467 / inTopicNo.2)  Re[1]: HtmlElementCollectionni
□投稿者/ επιστημη (572回)-(2007/08/14(Tue) 22:02:49)
επιστημη さんの Web サイト
No6463 (らじゃ さん) に返信

> 私の知る限りでは、HtmlElementCollectionはGetElementsByTagNameなどの戻り値として得るしか方法がなく、HtmlElementCollectionクラス自身には要素を操作するメソッドや、新規に内容を設定できるようなコンストラクタがありません。

なので無理ではないかと。

引用返信 編集キー/
■6471 / inTopicNo.3)  Re[2]: HtmlElementCollectionni
□投稿者/ らじゃ (2回)-(2007/08/15(Wed) 02:09:32)
HtmlElementCollection自体にそのような機能はないだろうとあきらめています。(T_T)

あとはConvertのように、別のクラスかなんかで変換機能を提供していないかなと

・・・・・ま、ないでしょうねぇ〜


引用返信 編集キー/
■6472 / inTopicNo.4)  Re[3]: HtmlElementCollectionni
□投稿者/ 渋木宏明(ひどり) (298回)-(2007/08/15(Wed) 07:27:40)
渋木宏明(ひどり) さんの Web サイト
最終的に何をしたいんでしょう?
引用返信 編集キー/
■6473 / inTopicNo.5)  Re[4]: HtmlElementCollectionni
□投稿者/ らじゃ (3回)-(2007/08/15(Wed) 08:41:37)
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();
}



引用返信 編集キー/
■6474 / inTopicNo.6)  Re[5]: HtmlElementCollectionni
□投稿者/ IIJIMAS (14回)-(2007/08/15(Wed) 09:14:27)
No6473 (らじゃ さん) に返信
> 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に属することが自然に保障できること
> という理由です。
> 絶対にないと困るわけではありません。

単にList<HtmlElement>をメンバにもつICollection, IEnumerable等を適切に実装した、要件を満たすラッパークラス作ればいいのではないでしょうか。
引用返信 編集キー/
■6477 / inTopicNo.7)  Re[6]: HtmlElementCollectionni
□投稿者/ らじゃ (4回)-(2007/08/15(Wed) 15:00:03)
もちろん、上記内容を実装する具体的な方法はいくらでもあるとして、

私が今回お伺いしたかったのは、C#.NETで

「HtmlElement[]をHtmlElementCollectionにダイレクト変換する方法が存在するかどうか」

です。

しかし、ないようなので、あきらめて解決とします。

みなさまありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -