人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

その2:simple_html_dom.phpの質問です

http://q.hatena.ne.jp/1446098727
の関連です。

前回は
http://1811way.com/work008/sample09.html
でしたが、

「SubjectNoTest Top 文字だけが途中で入ってきた」
を加えた場合、
http://1811way.com/work008/sample10.html

親のルートに<h2,h3,h4>タグが続いた場合
(=h系のタグにはul,liタグがないもの)は

3.[Subject]:SubjectNo2 Top > SubjectNo2 Second > SubjectNo2 Third > SubjectNo2 4Th
->
3.[Subject]:SubjectNoTest Top 文字だけが途中で入ってきた&SubjectNo2 Top> SubjectNo2 Second > SubjectNo2 Third > SubjectNo2 4Th

というように、
次に出てくるh系のタグでul,liタグを持つものをSubjectに追加する
というような処理を考えているんですができません。

前回書いていただいた
if (count($ul_child) == 0) {
のelseあたりで処理をしてやればいいのかとも思いますが、
書けません。

すいません。書いていただけると助かります。
もし、お忙しければ、ヒントだけでもいただけると大変助かります。

●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント ベストアンサー

パンくずのリストを、文字列ではなく要素の配列にしてたのが幸いして、思ったより早くできました :-)

前のコードで、パンくずの候補から文字列を抜き出す関数を定義していました。

function text_content($e) {
 return $e->plaintext;
}

これを、その要素のテキストだけではなく、更に前の方にたどって見出し要素であれば、それらのテキストを「&」でつなげたものを返すようにします。

function text_content($e) {
 $s = '';
 while ($e != null && preg_match('/^H[1234]/i', $e->tag)) {
 $s = $e->plaintext . ($s == '' ? '' : ' & ') . $s;
 $e = $e->prev_sibling();
 }
 return $s;
}

見出し要素が三つ、四つ続いていても、同じ階層である限り連結します。

Phpfiddle で試した結果です。
http://phpfiddle.org/lite/code/79qj-v0x3


kohhiさんのコメント
ありがとうございました。目から鱗、でした。すぐ回答いただき、大変助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ