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

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

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

Re[11]: InnerHtmlやInnerTextで獲得したデータの行番


(過去ログ 71 を表示中)

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

■41564 / inTopicNo.1)  InnerHtmlやInnerTextで獲得したデータの行番
  
□投稿者/ RT (139回)-(2009/09/24(Thu) 15:45:46)

分類:[C#] 

こんにちは。RTです。
たびたびお世話になっております。
C#にて、プログラミングを行っております。

質問なのですが、ウェブブラウザで表示したページからInnerHtmlやInnerTextによって、テキストデータを取得する事が出来ますが、その取得したデータの行番号のような位置情報を得る事は出来るのでしょうか?
アドバイスよろしくお願いします。

引用返信 編集キー/
■41567 / inTopicNo.2)  Re[1]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ επιστημη (2171回)-(2009/09/24(Thu) 16:51:45)
επιστημη さんの Web サイト
> その取得したデータの行番号のような位置情報を得る事は出来るのでしょうか?

たとえ取れたとしても、ブラウザの横幅しだいでコロコロ変わっちゃうんじゃないですか?

引用返信 編集キー/
■41568 / inTopicNo.3)  Re[2]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ RT (140回)-(2009/09/24(Thu) 16:55:24)
No41567 (επιστημη さん) に返信
>>その取得したデータの行番号のような位置情報を得る事は出来るのでしょうか?
>
> たとえ取れたとしても、ブラウザの横幅しだいでコロコロ変わっちゃうんじゃないですか?
>

表示しているページのソースコードから、情報を得れば、横幅が変わっても変わらないと思います。
引用返信 編集キー/
■41569 / inTopicNo.4)  Re[3]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ επιστημη (2172回)-(2009/09/24(Thu) 17:00:36)
επιστημη さんの Web サイト
> 表示しているページのソースコードから、情報を得れば、横幅が変わっても変わらないと思います。

論理行番号(ぶっちゃけ改行の数)てこと?

引用返信 編集キー/
■41570 / inTopicNo.5)  Re[4]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ RT (141回)-(2009/09/24(Thu) 17:02:42)
No41569 (επιστημη さん) に返信
>>表示しているページのソースコードから、情報を得れば、横幅が変わっても変わらないと思います。
>
> 論理行番号(ぶっちゃけ改行の数)てこと?
>

HTMLコードに対する行番号です。
引用返信 編集キー/
■41572 / inTopicNo.6)  Re[5]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ 魔界の仮面弁士 (1317回)-(2009/09/24(Thu) 17:52:47)
No41570 (RT さん) に返信
> HTMLコードに対する行番号です。

完全に把握するのは無理だと思いますよ。

以前にも少し触れていますが、
http://bbs.wankuma.com/index.cgi?mode=al2&namber=40662&KLOG=70
InnerHtml 等から得た値というのは、HTML を解析して Document Object Model として
再構築された結果であって、改行位置などの生の HTML ソースの情報を
そのまま維持しているという訳では無いからです。


たとえ、元の HTML が
<p
 class="sample"
 ><input
 value="あいうえお"
 ><font
 size="+2"
 >かきくけこ</font
 ></p>
の 8 行で構成されていたとしても、InnerHtml 等から得られる文字列は、
<P class=sample><INPUT value=あいうえお><FONT size=+2>かきくけこ</FONT></P>
の 1 行になってしまい可能性があります。


private void Form1_Load(object sender, EventArgs e)
{
    this.webBrowser1.Navigate(@"C:\sample\sample.html");
}

private void button1_Click(object sender, EventArgs e)
{
    // .Multiline = true の状態であること
    textBox1.Text = webBrowser1.Document.Body.InnerHtml;
    textBox2.Text = new StreamReader(webBrowser1.DocumentStream).ReadToEnd();
}

引用返信 編集キー/
■41574 / inTopicNo.7)  Re[6]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ RT (142回)-(2009/09/24(Thu) 18:24:49)
No41572 (魔界の仮面弁士 さん) に返信

では、リッチテキストボックスに表示したHTMLコードから、InnerTextのように、テキストデータを抜き出す事は出来るでしょうか?
引用返信 編集キー/
■41575 / inTopicNo.8)  Re[7]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ 魔界の仮面弁士 (1318回)-(2009/09/24(Thu) 19:02:51)
No41574 (RT さん) に返信
> では、リッチテキストボックスに表示したHTMLコードから、InnerTextのように、テキストデータを抜き出す事は出来るでしょうか?

自力実装が必要かと。

御存じのように RichTextBox は、HTML 用のものではなく、RTF 用のものです。
リッチテキスト(SelectedRtf) に対して、テキスト(SelectedText)を取り出す事ならば
出来ますが、HTML からテキスト部を抜き出すための機能は備えていません。
引用返信 編集キー/
■41596 / inTopicNo.9)  Re[8]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ RT (143回)-(2009/09/25(Fri) 11:55:42)
InnerTextで、ウェブブラウザに表示したページから、テキストデータをとる際に、\r\nのようなHTMLコードにはない
内部コードのような、よけいなデータが紛れ込むのですが、それはなぜでしょうか?
引用返信 編集キー/
■41600 / inTopicNo.10)  Re[9]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ 魔界の仮面弁士 (1319回)-(2009/09/25(Fri) 13:17:14)
No41596 (RT さん) に返信
> InnerTextで、ウェブブラウザに表示したページから、テキストデータをとる際に、\r\nのようなHTMLコードにはない
> 内部コードのような、よけいなデータが紛れ込むのですが、それはなぜでしょうか?

答えにくい質問なのですが、端折って説明すると、そもそも HTML コードの改行とテキストの表記は
別物であるという事です。<p> や <div> や <textarea> や <pre> など、それぞれの要素に併せて
テキストとしての改行の取り扱いは異なってきます。


例えば、元の HTML が
 <span>abc<p>def</p><p>ghi<br>jkl</p></span>
という“改行無し”の 1 行であったとしても、InnerText は
 『abc[\r][\n]def[\r][\n]ghi[\r][\n]jkl』
という“改行 3 つ”を含んだデータとなりえます。

その逆に、改行の存在が見えなくなるケースもあります。例えば、
 <span>abc[\r][\n][\t][\r][\n]xyz</span> … [\*] の部分は、CR/LF/TAB に読み替えてください。
や
 <span>abc&#13;&#10;&#9;&#13;&#10;xyz</span> … 10進による数値文字参照
といった HTML があった場合、連続する改行やタブが一個の空白に置き換えられ、
テキストとしては『abc xyz』へとレンダリングされる仕様です。


そのように処理される理由は「そういう仕様あるいは実装になっているから」としか
答える事ができないのですが、各社の DOM によって実装に差異がある場合もありますし、
MSHTML に限定してみても、IE のバージョンで差がでる事もあります。
http://support.microsoft.com/kb/811037/en-us

引用返信 編集キー/
■41610 / inTopicNo.11)  Re[10]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ RT (144回)-(2009/09/25(Fri) 15:09:44)
No41600 (魔界の仮面弁士 さん) に返信

> <span>abc[\r][\n][\t][\r][\n]xyz</span> … [\*] の部分は、CR/LF/TAB に読み替えてください。

CR/LF/TAB に読み替えるとは、どういう事でしょうか?
引用返信 編集キー/
■41613 / inTopicNo.12)  Re[11]: InnerHtmlやInnerTextで獲得したデータの行番
□投稿者/ 魔界の仮面弁士 (1323回)-(2009/09/25(Fri) 15:45:28)
No41610 (RT さん) に返信
>> <span>abc[\r][\n][\t][\r][\n]xyz</span> … [\*] の部分は、CR/LF/TAB に読み替えてください。
> CR/LF/TAB に読み替えるとは、どういう事でしょうか?

[\t] をタブに、
[\r] をキャリッジリターンに、
[\n] をラインフィードに、それぞれ 1 文字ずつ置き換えてください、という事です。

掲示板への投稿では、タブ文字や復帰改行などは判読し難いので、
先の投稿では、[\t]のような表現に置き換えて記述した次第です。


これらは、C# におけるエスケープ シーケンス 表現を真似た物です。
たとえばタブ文字を表現する場合、C# では下記のいずれの書き方もできますよね。

string a = "\t";
string b = "\x9";
string c = "	";
Console.WriteLine(a == b);  // True
Console.WriteLine(b == c);  // True
Console.WriteLine(c == a);  // True

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -