質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2915閲覧

PHP Simple HTML DOM Parserでテキストを含めた子要素を取得

panasus

総合スコア12

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/09/10 02:32

PHP Simple HTML DOM Parserでテキストを含めた子要素を取得するにはどうすればよいでしょうか?

HTML

1 <div class='main'> 2 あいうえお 3 <br> 4 <div>サシスセソ</div> 5 かきくけこ 6 <br> 7 <p>タチツテト</p> 8 </div>

PHP

1$html = file_get_html('xxx.html'); 2$body = $html->find('div[class=main]')[0]; 3}

PHP Simple HTML DOM Parserで<div class='main'>をfindし、
childrenを取ると子要素のタグしか取得できませんでした。
テキストタグを同列に子要素として取得するにはどうすれば良いでしょうか?

// $body->childrenの中身 array('<br>', '<div>サシスセソ</div>', '<br>', '<p>タチツテト</p>') // 期待していたもの array('あいうえお', '<br>', '<div>サシスセソ</div>', 'かきくけこ', '<br>', '<p>タチツテト</p>')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

$body->children ではなく $body->nodes で期待する物が取得できました。

投稿2017/09/10 23:54

panasus

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

XMLとして操作したければ、タグで挟まれていない要素や</ >がなく閉じていない<br>タグは整形しなければいけません。

php

1$xml2 = preg_replace("/<br>/","<br />", $xml); 2$xml2 = preg_replace("/(.[^<\s].+[^>])\n/","<token1>$1</token1>\n", $xml2);

のように、<br><br />に、タグなしの要素を<token1> </token1>ではさんでxmlのメソッドにかけます。
配列に納めるときに<token1></token1>のタグを消せば、お望みの配列が出せるでしょう。

投稿2017/09/10 14:06

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panasus

2017/09/11 00:11

childrenではなくnodesというプロパティで期待する物が取得できました。 ご提案頂いた方法だと あああ<span>いいい</span> のような1行に複数の要素を記載したHTMLがあった場合に あああ の部分が取得できない気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問