![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
特定のWebページを取得し、その情報の一部を利用したいと思っています。
そのページはXML形式ではなく一般的なhtml形式です。
今はやり方がわからない為、ブラウザに一旦受けさせて
ブラウザの機能でパースしてもらってそれを利用しています。
しかし、スマートではないのでこのやり方から卒業したいと思っています。
(そもそもAjaxじゃないし)
これを(一旦html文字列を取得して)何かのJavaScriptライブラリ等を利用して
「getElementsByName…」等を利用できる形のオブジェクトに
変換したいと思っています。
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open('GET', …);
…
htmlStr = xmlhttp.responseText; // ←これを使う?
htmlDom = hoge.parse(htmlStr);
htmlDom = xmlhttp.responseHTML; // ←こんな感じのがあれば最高
alert(htmlDom.getElementsByName("…")[0].value);
google提供のライブラリに「GXml.parse」というものがあり、
XML文字列をXML DOM 形式にパースするという機能があります。
これのhtml版はないものかと思っているしだいです。
例えば、以下のページ(どちらでもいい)から為替レートを取得したい場合などです。
外為 レート - Infoseek マネー
http://money.www.infoseek.co.jp/MnForex/fxrate/
外為 米ドル/円 - Infoseek マネー
http://money.www.infoseek.co.jp/MnForex/fxdetail …
※今回の質問は「どこでもいいから為替レートを取得する方法」ではありません。
知りたいのはhtmlのパース方法です。為替はあくまでも例です。
(Webブラウザにレンダリングさせないで)
html文字列をparseする方法。(JavaScriptライブラリの使用可)
※html文字列からでなくともいい
これを教えてください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
HTMLの文法はタグの省略が可能な部分が多く、XMLパーサーではエラーになることが多いです。
XMLパーサーとHTMLパーサーの違いですね。
HTMLパーサーの方が複雑です。
var doc=document.createDocumentFragment();
doc.innerHTML= xmlhttp.responseText;
alert(doc.getElementsByName('a')[0].value);
未検証です。
<body>の直後から</body>の直前までを取り出しておいた方がいいかもしれません。
xmlhttp.responseText.match(/<body.*?>(.*)<\/body>/);
var html=RegExp.$1;
// htmlを上記innerHTMLに代入
未検証です。
紹介いただいた方法で試してみました。
しかし、正規表現がうまく効かなかったり(技術力不足のため)
文字コードの問題で引っかかってしまったりして結局うまくいきませんでした。
なのであきらめ普通にiframeで読み込み、非表示にしてパースで記述したところ
非常に簡単に実装完了することが出来ました。
この労力差を考えると、少なくとも今はまだ、何が何でもAJax的な手法に
こだわらなくてもいいかと思うようになりました。
汚くても、スマートじゃなくてもしばらくは古い方法を使うことにしました。
しかし紹介していただいた考え方は参考になりました。
目からうろこが落ちる思いでした。
ありがとうございました。
No.1
- 回答日時:
多分できないんじゃないでしょうか。
HTMLはそれができないという欠点があったためXMLが注目され、
一方HTMLではidアトリビュートが仕様として追加された、
という経緯があったと記憶しています。
つまり、それができるのであればXMLも必要ないし、idアトリビュートも
必要なかった、ということではないかと。
もっともそれを乗り越えて、多少方法が複雑でも頑張ってくれるような
ライブラリがこの世に存在しません、ってことはないかと思います。
確かに以前使っていた製品の内部ライブラリはそんなことをやろうと
してました。が、あまりに使いづらいので、いつのまにか
消えてしまいましたが。。。。
なるほど。そういうもんですか。
基本的にはブラウザ君の力に頼るしかないのかもしれませんね。
それか、html文字列を正規表現とかで解析するか。
ということはブラウザのparse機能は
柔軟でかつ優秀ということなのかもしれませんね。
参考になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- ふるさと納税 株式投資の配当金を ふるさと納税計限度額計算へ算入 税抜きか否か 1 2022/11/13 10:03
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- 経済学 これカバーなし購買力平価の式らしいのですが、 iが1年後の自国の金利で、i*が外国の1年後の金利で、 3 2023/06/08 17:13
- 外国株 外国株の為替差益の税金について質問です。 2 2022/12/10 22:15
- 教えて!goo 「質問する」って何ですか? 分からない事や知りたい事ですよね? 質問の「質」って誰が決めるの? 2 2022/06/04 20:41
- その他(行政) e-govで必要な電子証明書について 1 2022/08/20 22:56
- HTML・CSS Chrome のキャッシュについて 3 2022/05/26 07:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ページを訪問者にたった一度だ...
-
ウインドウを縮小しても文字を...
-
ユーザーが更新ボタンを押さな...
-
ランダムにページにアクセスしたい
-
<a href="#" …>の意味を教えて...
-
ページ全体を検索して特定文字...
-
mailto + 変数名
-
特定のウィンドウ名を持つウィ...
-
JavaScriptの外部ファイル読み込み
-
別ファイルのfunctionの読み込み方
-
ブラウザをJavaScriptで最小化…
-
JavaScriptでiframeの内容を「...
-
インラインフレームで表示され...
-
VBscriptでVisualBasicのような...
-
テキストボックス内にハイパー...
-
新しいウィンドゥを最大化で立...
-
親フレームのURLによって、...
-
カウントダウンとカウントアッ...
-
processing
-
初心者javascript ウィンドウサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーが更新ボタンを押さな...
-
ウインドウを縮小しても文字を...
-
プルダウンと入力を両方行う検...
-
ランダムにページにアクセスしたい
-
更新日時を偽装したい。方法は...
-
HP上のPDFファイルを保存禁止...
-
HTMLタグでマウスポインタを変...
-
「街」や「428」や「かまいたち...
-
HTML5のcanvasで描画がされない
-
【SSI】include file、include ...
-
ページ毎に共通のメニューを表...
-
リンク先を広告ページ経由で表...
-
input TYPE="FILE"で取得した画...
-
a.htmlにあるテキストエリアに...
-
一定時間ごとにページ交代させたい
-
ifraameでのランダム表示時に不...
-
カウントダウンタイマー終了で...
-
htmlで記述されたWebページの解...
-
[html] リンク先のページのラジ...
-
showModalDialog内でのページ遷移
おすすめ情報