• 締切済み

HTMLをパースしたい

こんにちわ ActionScriptでHTMLをパースしてHTML要素を追加したり、削除したりしたいのですが、HTMLをパースできるクラスが見つかりません。(ないような気がします。)XMLをパースするクラスがあったのですが、XMLでHTMLをパースをパースすると<br>等終了タグがない要素でエラーが出てしまいます。 というような状況で、HTMLをパースする方法、またよい代替案をご存知のかた、ぜひご伝授していただけますでしょうか?よろしくお願いいたします。

  • Flash
  • 回答数2
  • ありがとう数3

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 面倒だと言われますと,それ以上書きようがありませんから,それに関しての回答は控えます。 正規表現は ActionScript3.0 (Flash CS3 Professional)から使えますが, ActionScript2.0 では普通は無理です。 しかし調べてみると ActionScript2.0 でもそういうクラスファイルが配布されているようです。 ご存じだったかもしれませんが一応参考まで。 http://www.google.co.jp/search?hl=ja&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+ActionScript2.0

hasekyou
質問者

お礼

ありがとうございました

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

HTML 内を見て,「文字列を抜き出す・抽出する」くらいでしたら Flash のみでできると思います。 しかし, > HTML要素を追加したり、削除したり これはどういう意味でしょうか? 1 HTML 自体を書き替えるということでしょうか? それでしたら Flash では無理です。 2 単に抜きだしたものをFlash内で加工するという意味でしょうか? それでしたら Flash でも工夫すれば可能だと思います。 1のHTML を書き替えるということでしたら見た目上だけは,JavaScript で可能です。 例えば今ご覧になっているこのページを閲覧した状態で, 上のアドレスの欄にある http://~ を消して, javascript:document.body.innerHTML=document.body.innerHTML.split('。').join('ぞ~!!');focus(); ↑これを貼り付けてもらって,Enterキーを押せば, このページの文章が全体的に力説したものに変わると思います。 これに近い物を JavaSuript の function 内に作成し, ActionScriptからその function を実行すれば可能かもしれません。 しかし加工した物を保存するとなると JavaScript でも無理で,PHP などサーバ言語が必要になります。 とにかく, 「HTML要素を追加したり、削除したり」 の正確な意味がわからないので, 誰もちゃんとは回答できないと思います。 ==================== 2の「単に抜きだしたものをFlash内で加工する」場合について, 簡単な例を書いておきます。 「my_flash.swf」 が同じ階層にある 「my_flash.html」 に貼りついているとします。   任意のフォルダ    ├ my_flash.html (my_flash.swf が貼りついている)    └ my_flash.swf その「my_flash.html」の <title>~</title> 間を, 「my_flash.swf」から抜きだして適当に文字装飾する例です。 Flash で新規ドキュメントを作成し, 「my_flash.fla」 というファイル名で任意のフォルダに保存します。 そして,フレーム1 に次のようなスクリプトを書きます(コピペします)。 ////////////////////////////////////////////////////////// // HTML を Shift-JIS として扱う System.useCodepage = true; // タイトルの後に入れる文字列を指定 mes = " だよぉ~ん (⌒~⌒)ニンマリ"; // テキストフィールド my_txt を作成 _root.createTextField("my_txt", 0, 20, 20, 350, 30); // myLV という LoadVars クラスのインスタンスを作成 myLV = new LoadVars(); // myLV にデータが読み込まれたときの動作定義 myLV.onData = function(my_dat) { my_txt.text = my_dat.split("<title>")[1].split("</title>")[0]+mes; }; myLV.load("my_flash.html"); ////////////////////////////////////////////////////////// (↑ActionScript1.0,FlashMX 以上(FlashPlayer6以上) で使用可能) これで出来上がりです。 SWF と HTML をパブリッシュすれば動作確認できます。 HTML のタイトルをテキストエディタなどで書き替えて保存し, また開けば Flash に表示されるタイトルも変わると思います。 上の例では, ごちゃごちゃと物を用意するのが面倒なので, SWF の貼りついている HTML のタイトルを表示させただけです。 SWF が貼りついていない他の HTML でも, 同じサーバで ,同じドメイン内にある HTML なら同様に表示できます。 my_txt.text = my_dat.split("<title>")[1].split("</title>")[0]+mes; この行の my_dat.split("<title>")[1].split("</title>")[0]; についてのみ説明します。 これは, my_dat(ロードされたHTML全体)を <title> で2分した配列を作成し, その配列の エレメント1(2分した後側の要素) をさらに </title> で2分した配列を作成し, その配列の エレメント0(2分した前側の要素) を取得するという意味です。 (配列のエレメントは 0 番が最初のエレメントです。) 流れを図示すると次のような感じです。  …○○○<title>△△△</title>□□□… ←my_dat(HTML)    ↓split("<title>")  …○○○  |  △△△</title>□□□…    ↓[1]  △△△</title>□□□…    ↓split("</title>")  △△△  |  □□□…    ↓[0]  △△△ これで <title>~</title> 間の △△△ が取りだせます。 <title>~</title> は HTML 内に普通は1つしかありませんから簡単です。 他のものの場合は難しいですが, タグに固有の属性を付けるなど HTML に工夫をすれば,なんとか取得できると思います。 上のものは私が今考えてみただけのものです。 したがって同様の方法を解説しているようなサイトは知りません。 ヘルプぐらいが提示できる参考URLです↓。 Flashドキュメンテーション より 「LoadVars を使用したテキストのロードと表示」 http://livedocs.adobe.com/flash/8_jp/main/00001425.html 「split (String.split メソッド)」 http://livedocs.adobe.com/flash/8_jp/main/00002705.html ==================== 最初に書きましたように, ご質問内容がはっきりつかめません(どうとでも取れる)ので, これで良いのか悪いのかはわかりません。 これで悪い場合は補足してください。 私が回答できるかどうかはわかりませんが。

hasekyou
質問者

お礼

ご丁寧に回答して下さいましてありがとうございます。 質問の内容がわかりにくかったんでしょうか。。。 目的は、「HTMLのソースに対していろいろ文字列処理をしたいことです。」 やり方としては、以下の二つの方法があると思います。1に比べて明らかに2の方が簡単なので、【HTMLをパースする方法を探しているところです。】 1.BlurFiltanさんがお書きになったStringクラスで定義されているメソッドを使う方法(正規表現も含みます。) 2.HTMLをパースしてDOMオブジェクトに変換する方法 また、「HTML要素を追加したり、削除したりする」の例を挙げておきます。以下の例では、Stringクラスのメソッドだけでも勿論できますが、かなり面倒です。【もしHTMLをDOMに変換できればかなり楽なのです。】 ----------変更前のHTML--------- <tr class="hogehoge"> <td>変更前のTD値1</td> <td>変更後のTD値2</td> </tr> <tr class="aaaaaa"> <td>td value1</td> <td>td value2 </tr> ----------以下のHTMLに変更したい---------- TRのclass属性がhogehogeの場合のみ、子要素のtdの値を変更する <tr class="hogehoge"> <td>変更後のTD値1</td> <td>変更後のTD値2</td> </tr> <tr class="aaaaaa"> <td>td value1</td> <td>td value2 </tr>

関連するQ&A

  • XMLパースエラー

    はじめまして。 HTMLを開発している者です。 APIを駆使して情報を得たいのですが、localhost環境で開発していた時には正常に動作したのに、いざサーバーへアップすると、情報を取得するphpファイルで、 XML パースエラー: 要素が見つかりません。 URL: http://~ 行番号: 1, 列番号: 1: と出るのです。これはやはりサーバー環境によるエラーなのでしょうか? ご回答よろしくお願いいたします。

    • 締切済み
    • XML
  • [JS] htmlをパースしてdomにしたい

    テキストのhtmlライクの構文があります。 これをパースして、dom構造のオブジェクトに変換したいです。 createElement("div")して、innerHTMLに入れる方法の場合、 IEではhtmlで定義されていないタグ名が無視されてしまうため、不可です。 xmlのパーサに食わせる方法の場合、 テキストが厳密にxml構文に沿っていないとエラーとなるので、 閉じタグ漏れがあるテキストを処理できないため、不可です。 パースする関数を作成するしかないかと思っています。 すでに誰かが作成していそうですが、探しても見つかりませんでした。 こうやって作った、とか、参考となるページなどありましたら教えてください。

  • XMLでテーブルをつくるときに普通のHTMLで組んだらエラーがでました。

    XMLでテーブルをつくるときに 普通のHTMLで組んだらエラーがでたのですが、 なにか注意することはありますか? タグの使いかたが違うとか、特別なタグをいれなくてはいけないとかあれば、教えていただきたいです。

  • Another HTML-lint gatewayでHTML文書の文法

    Another HTML-lint gatewayでHTML文書の文法をチェックしましたが、次の項目の修正方法がわかりません。 HTMLヴァージョンは「XHTML1.0 Transitional」(DreamweaverCS5) (1)空要素タグ <img> は <img /> として閉じなければなりません <p>    <img src="image/otaxoutline.JPG" width="480" height="360" alt="oxox"></p> (2)空要素タグ <img> の要素には空白さえも含めることはできません p class="menu-left"><a href="http://twitter.com/xxxx"><img src="image/otaxtwitter.jpg" width="85" height="45" alt="oxox"> </a></p> (3)空要素タグ <br> の要素には空白さえも含めることはできません (4)空要素タグ <br> は <br /> として閉じなければなりません by <a href="http://www.automatic-link.net/" target="_blank">oxox</a><br> (5)空要素タグ <hr> の要素には空白さえも含めることはできません (6)空要素タグ <hr> は <hr /> として閉じなければなりません <p class="center">                 <a href="http://www.otax81.com/FormMail/contact/FormMail.html"><img src="image/otaxtoiawaefooter.jpg" width="435" height="171" alt="footer問合せ"></a></p> <hr> <参考> http://openlab.ring.gr.jp/k16/htmllint/htmllint.html http://otax81.com/

  • XHTMLとHTMLの違いについて

    XHTMLのHTMLの違いについて教えてください。 勉強するものの、これといった違いが判らずにこまってます。 (今のところ、HTMLとは記述方式が違うんだよ~とか、XMLの宣言が必要なんだよ~、ということはわかったのですが) (参考したURL) http://www.atmarkit.co.jp/fxml/askxmlexpert/022xhtml/22xhtml.html HTMLとXHTMLの違いとして以下の点が挙げられていることがわかりました。 ----------------------------------------------------------------- 1.文書は整形式でなければならない 2.要素名及び属性名は小文字でなければならない 3.非空要素には終了タグが必要である 4.属性値は常に引用符で括られなければならない 5.属性の省略化はしてはならない 6.meta、hr、br、img などは、空要素として書く 7.属性値内での改行を含む複数の空白は1つと見なす 8.スクリプトおよびスタイル要素の定義が異なる 9.要素の入れ子などSGMLの排除機能を再現できない 10.‘id’および‘name’属性をもつ要素は、‘id’属性を使用する ----------------------------------------------------------------- とあるのですが、違う部分っていうのは「こういった定義部分だけ」であって、動作として大きな違い「ここが違うんだ」といった部分はないのでしょうか? 「書式が厳密になっています。」言葉から、XHTMLは「HTMLをより厳密に書くもの」ということなのでしょうか? また、10番目の、 「‘id’および‘name’属性をもつ要素は、‘id’属性を使用する 」について、イメージできなかったのですが、一体何のことを言っているのでしょうか? 例えば、JavaScriptを使用して、要素を操作する場合は、 getElementById("ID名")にて、操作を行うべきである、と言っているのでしょうか?

    • ベストアンサー
    • HTML
  • HTML5について教えてください

    当方、HTML5初心者(勉強中)のため、分かりやすく説明して頂ければ幸いです。 HTML4.1で書かれたページをHTML5にするとしたら、デコード宣言(HTML5から追加や変更&廃止になったタグも含む)。 上記以外で直すべきところはありますか? あるのであれば例を挙げて頂ければ幸いです。 また、フレーズ・コンテンツの中にフレーズ・コンテンツが入っているというのはマズいのでしょうか? 例 <p>今日は<span class="gray">曇りだ。<span class="文字サイズ変更">そして寒い。</span></span></p> など。今までインライン要素・ブロックレベル要素と分かれていた要素が細かく分類されていますよね。 この分類によって何か記述のルール変更等はあるのでしょうか。

    • ベストアンサー
    • HTML
  • パースエラー

    FireFox2.0を使用していますが、最近、Foxmarksを左クリックすると以下のようなエラーが発生します。今のところ同期とか取れているみたいですが、気になります。Foxmarksを削除して入れなおしても同じです。 昨日firefox3.0にバージョンアップしても同じです。 よろしくお願いします。 -------------------------- XML パースエラー: 定義されていない実体が使用されています。 URL: chrome://foxmarks/content/foxmarks-dialog.xul 行番号: 76, 列番号: 29: <label class="text-link" onclick='FoxmarksForgot()' value="&dialog.label.forgotPassword;" /> ------------------------- ------^

  • Firefox3 「XML パースエラー」について教えて下さい。

    Windows VistaでFirefox3を使用しています。 最近ブラウザを二つ以上起動させるとアドオンの 「スピードダイヤル」が表示されず代わりに > XML パースエラー: 要素が見つかりません。 > URL: chrome://speeddial/content/speeddial.xul > 行番号: 1、列番号: 1: このような文章が表示されるようになりました。 これはブラウザを再起動させることで直る(?)のですが どうしたらこれが表示されないよう元に直すことが出来ますか?

  • キャリア別のHTMLを出力する

    PHPにてモバイル用のサイトを作ろうと思っています。 如何せん共通化されていないので(昔ほどでは無いですが)まだまだキャリア別のページを作る必要があるのかなと思っています。 リダイレクトでページを分けるとそれぞれ作らないといけないので良い方法を模索しているのですがどのような方法が良いか。 以下のような方法を考えましたが如何でしょうか。 HTMLクラス(基盤)  DoCoMoHTMLクラス(HTMLクラスを継承)  AuHTMLクラス(HTMLクラスを継承)  SoftBankHTMLクラス(HTMLクラスを継承) ページにアクセス時にキャリアごとのHTMLクラスを生成する。 HTMLクラスにはspanタグやdivタグ等のメソッドがあり、それを利用してHTMLとして表示する部分を作っていく。 作ったHTMLを出力する。 $html = Common :: getHTML(); // getHTMLでキャリア判別して new DoCoMoHTML();等を返す // このメソッドはDoCoMoHTMLクラス // <div style="color:#000000;">あいうえ print $html -> div ( "#000000", "あいうえ" ); // </div> print $html -> div(); // <hr>このメソッドはHTMLクラス print $html -> hr(); 基本的な共通タグはHTMLクラスにもって共通では適用できないタグはサブクラスにて実装するようにする。 こうすることによって1ソースでキャリアを意識せずに作ることが可能と思っています。 (細かいところは調整が必要になるかと思いますが) 方法はいろいろありそうですが何か良い案はありませんでしょうか。

    • 締切済み
    • PHP
  • HTMLタグのエスケープ文字をタグに戻す方法

    JavaのBufferedReaderクラスを使用して HTMLファイルを1行ずつ読み込んでまた、別のファイルに出力したところ HTMLファイル内では <br /> と表示されているところが出力ファイルでは &lt;br /&gt; というようにエスケープ文字で出力されてしまいました。 タグをそのまま出力したいのですがエスケープ文字で出力されないようにするためには どのようにすればよろしいでしょうか。

    • ベストアンサー
    • Java

専門家に質問してみよう