• ベストアンサー

simple_html_domの属性検索について

趣味でプログラミングをしている者です。どうぞよろしくお願いします。 現在simple_html_domを使ってwebサイトの情報の抽出を試しています。 そこで、タグの抽出までは出来たのですが、属性値の抽出で躓いてしいました。 具体的には、属性名がhrefなどのローマ字のみなら抽出可能なのですが、○○-hrefのようにハイフンが入ると属性名をうまく認識してくれません。 ○ $array[ ]=$contents->find('a',0)->href × $array[ ]=$contents->find('a',0)->○○-href どなたか解決法を教えてくださいよろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

$array[ ]=$contents->find('a',0)->{'○○-href'} 可変変数の ${'○○-href'} と同じ概念です。

ikasumiramen
質問者

お礼

バッチリできました! どうもありがとうございました。

関連するQ&A

  • HTMLの属性を自由に作ることはいいのか?

    (X)HTMLの規則にそって書け、とよく言われますが、果たして100%従うことだけが善なのでしょうか? CSSが普及してから、完全に文書とデザインを分けて考えるようになり、進化系として、完全なXML(XHTML)的文書にして、検索エンジンなどにもわかりやすい文書構造に、ということで盲信しているイメージがあります。もしXMLであるならば、より効果的な属性の設定などもあっていいんじゃないかと思うのです。 たとえば、ページングのリンクなどで 1 2 3 4 5 とページへのリンクアンカーがあるとして、通常は <a href="?page=1">1</a> <a href="?page=2">2</a> のような形になるでしょうが、XML(DOM)としては <a href="?page=1" page="1">1</a> <a href="?page=2" page="2">2</a> というような 独自に page という属性にそのページナンバーを入れた方が取得しやすいと思うのですが、こういうのでもルール外だから悪、と言われてしまうのでしょうか? その文書をparseしても、そのページナンバーを取得するのにもうひと工夫が必要になってしまいます(hrefを正規表現するなどして)。それなら属性に書いた方が絶対楽だし、その値の意味を属性名としてわかりやすく定義できると思うのですが、どうなんでしょうか? 気になる点としては、今後新しく予約語としてその属性名が定義される可能性があり、その値の意味が異なり、ブラウザの挙動もおかしくなる可能性は理解できます。でも、それはプログラミングしてる人なら、バージョンアップでよく出てくることですし、とりわけHTMLだけやめておけ、というのもおかしいと思いますし。絶対かぶらないように、属性名を作ればいいだけですけどね。servicename_page="2" みたいな(笑)。

  • 抽出 正規表現 DOM?

    PHPの正規表現で、例えば <img src="画像ファイル名"...> のようにイメージタグのsrc部分の画像ファイル名を抽出させたいのですが、正規表現の記述の仕方がわかりません。 このようなイメージタグなのですが、imgがIMGだったり、src=画像ファイル名 のように""がなかったり、 alt, width, height, borderなど属性もありますので、正規表現で純粋に画像ファイル名を抽出するのは難しいと考えますが、ふと思ったのですが、DOM???を使えば簡単にできる?かなと思うだけでこれも実現方法がわかりません。 現在、PHP4.3を使っていますが可能でしょうか?

    • ベストアンサー
    • PHP
  • XML::DOM / XML::XPathでソート

    XML::DOMで効率的なソートの方法はどんなものがありますでしょうか。 一応動くものは作れたのですが、効率的とは言い難く、しかも ソート項目が一意のデータでないといけないという欠点があります。 ############################################### use XML::DOM::XPath; my $xml = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list> <item id="10">Apple</item> <item id="5">Orange</item> <item id="20">Melon</item> </list> EOM my $parser = XML::DOM::Parser->new(); my $doc = $parser->parse( $xml ); ## <item>タグの一覧を作成 my @list = $doc->findnodes('/list/item'); ## <item>タグ id属性一覧を作成 my @idlist = map{ $_->getAttribute("id") } @list; ## id属性順にソート foreach my $id ( sort{ $a<=>$b } @idlist ){ ## id属性値を指定してノードリストを取得 my @item = $doc->findnodes('/list/item[@id='.$id.']'); ## idは一意なのでリストの先頭で固定 print $item[0]->getAttribute('id')."\n"; print $item[0]->getFirstChild->getNodeValue."\n"; } ############################################### ハッシュなら sort{ $hoe{$b} <=> $hoe{$a} } keys %hoe といった方法があるのですが、XML::DOMの場合は同じようにいきません。 良い方法がありましたらお願いします。

    • ベストアンサー
    • Perl
  • <A> の属性 `TARGET`の代わりのタグですが。

    ご指導を、お願い致します。 <TD><A href="○○○//XXXXXX.XXXXX" target=" _blank"></TD> このタグでは文法記述では、 『<A>のTARGET属性は、その利用自体が薦められていません。 ID属性を使いましょう。』 と表示されますが、>blank<を必要として(新規ページで表示) 命令的な>target<の代わりには何のタグが必要なのでしょうか? ID属性での、代わりに入るタグは、何でしょうか。 ○○○○○="_blank">で教えて頂けますでしょうか。 CSSを使うべきも含めての回答も頂けると、有り難いです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • リンク先のID属性について

    ページの途中にリンクしたいとき、aタグにname属性を使用しますが、一般のタグにid属性を付加することもできますよね。 <a href="#jump">ジャンプ</a> ↓ <h3 id="jump">見出し</h3> こんな使い方ができると思うのですが、idを利用したリンク先指定は対応するブラウザが少ない、と某サイトに記されていました。しかし、具体的にブラウザのどのバージョンがだめなのか、などについては言及されていませんでした。 詳細をご存知の方、教えてください。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • テキストにalt属性を持たせるには。

    画像にalt属性を持たせるには<img src="画像のパス" alt="コメント">でいいと思うのですが、テキストにリンクを設定した状態でそこにalt属性を持たせるということは可能でしょうか? もし可能なら どの部分にそのタグを挿入したらいいのでしょうか? <FONT size="-1"><A href="リンク先" target="_blank">1</A> (『1』という文字列にリンクを設定した場合。) 初心者の質問のためわかりにくい表現がございましたらすみません。 よろしくおねがいします。

  • preg_match_all関数でaタグの属性を

    PHPのpreg_match_all関数でaタグの属性hrefの値だけをすべて取得するにはどうしたらよいでしょう?? 正規表現の部分が分かりません。 お願いします。

    • ベストアンサー
    • PHP
  • 【js】attrで属性を取得するとき・・・

    js初心者です。 div全体をクリックしてリンクできるようにしたいと思い、下記ソースを書いています。 (js) <script type="text/javascript"> $(function(){ $(".go_content").click(function(){ window.location=$(this).find("a").attr("href"); return false; }); }); </script> (html) <div class="go_content"> テキストが入りますテキストが入ります。 <a href="http://xxxxxxx" target="_top" ></a> </div> これで、通常なら思ったとおりに動作してくれます。 しかし、このソースはあるページのなかにiframeで表示させます。 なので、<a>にtarget="_top"を指定しています。 上記スクリプトのままだと、aのhref属性しか取得できずに、フレーム内でリンクしてしまいます。 一緒にtarget属性も取得するにはどうすればよいのでしょうか? 何か良い方法があれば教えてください。 よろしくお願いします。

  • 縦スクロールの表示位置によるDOM

    縦長のHTMLコンテンツで下にスクロールした時にそのスクロール位置によって 目次のリンクにselectedクラスをDOMで追加し、現在どの部分を表示しているのかを視覚的にわかりやすくしたいのですが、 方法がわからず悩んでおります。そもそもHTMLの構造的に可能どうかもわからない素人ですが、どなたかご教授頂きたいと存じます。 現在のHTMLの構造は、 コンテンツのHTMLの前に目次の記述があり、その目次部分はposition:fixedで常に見える位置に表示してあります。 構造を簡単にしますと以下のようになっております。 <!-- 目次 START --> <div id="toc"> <ul class="toc"> <li class="toc_lebel_1"> <a href="#見出し1"> class="toc">見出し1</a> </li> <li class="toc_lebel_1"> <a href="#見出し2"> class="toc">見出し2</a> </li> <li class="toc_lebel_1"> <a href="#見出し3"> class="toc">見出し3</a> </li> </ul> </div> <!-- 目次 END --> <!-- コンテンツ START --> <h1> <a name="見出し1" id="見出し1">見出し1</a> </h1> ・・・ <h2> <a name="見出し2" id="見出し2">見出し2</a> </h2> ・・・ <h2> <a name="見出し3" id="見出し3">見出し3</a> </h2> ・・・ <!-- コンテンツ END --> このページはかなり縦長のページになっており、下にスクロールした際に現在表示している位置(例えば、見出し1と見出し2の間を表示している場合の位置)によって 目次の該当箇所の<a>タグにselectedのようなクラスを追加したいです。 よろしくお願いします。

  • Dreamweaverで正規表現を用いた置換

    画像名の_アンダーバーを-ハイフンに置換したいのです。 プログラミングに詳しくなく、サイト内のHTMLを全置換したいため、Dreameaverを使えないかと思っています。 検索場所:[タグ][img] 属性あり:[src][=][(.*)\_(.*)] アクション:[src][$1-$2] 上記で置換すると、画像名内の1つの_(アンダーバー)しか置換してくれません。複数のアンダーバーを置換する表現を教えてください。

専門家に質問してみよう