もし、可能であれば、私が作ったプログラムの修正をお願いできると大変助かります。
http://1811way.com/work008/sample10.html
であれば、
<body>タグ以降
<h4><ul><li><h2><ul><li><h3>....
のように表示できれば、と思っています。
*<>は表示できなくても構いません。
1.私の書いたプログラム
require "simple_html_dom.php";
$html = file_get_html('sample1.html');
foreach ($html as $taglist) {
echo $taglist->tag;
}
2.環境:php5.6 Apache2.4 Windows
以上、よろしくお願いします。
子供のタグにもぐって行くということですよね。
こんな感じでできます。
<?php require "simple_html_dom.php"; $html = ... function extract_child_tag($p) { $e = $p->first_child(); while ($e) { echo '<' . $e->tag . '>'; extract_child_tag($e); $e = $e->next_sibling(); } } $body_list = $html->find('body'); extract_child_tag($body_list[0]);
タグを囲む < > をくっつけてますが、要らなかったら echo から外してください。
子供のタグにもぐって行くということですよね。
こんな感じでできます。
<?php require "simple_html_dom.php"; $html = ... function extract_child_tag($p) { $e = $p->first_child(); while ($e) { echo '<' . $e->tag . '>'; extract_child_tag($e); $e = $e->next_sibling(); } } $body_list = $html->find('body'); extract_child_tag($body_list[0]);
タグを囲む < > をくっつけてますが、要らなかったら echo から外してください。
お正月に早速回答いただきありがとうございます。いつもすいません。
できました。
先越されてしまった><
色々書き方はあるので、書いておきます。
<?php require "simple_html_dom.php"; $html = file_get_html('sample1.html'); function walk($node) { #if ($node->nodetype <> 1) return; foreach ($node->childNodes() as $child) { echo "<".$child->tag.">"; walk($child); } } walk($html->find("body", 0)); echo "\n";
<?php require "simple_html_dom.php"; $html = file_get_html('sample1.html'); $node = $html->find("body *", 0); while ($node) { echo "<".$node->tag.">"; # 子ノードがあればそれを、なければ兄弟ノードを $next = $node->firstChild() ?: $node->nextSibling(); while (! $next) { # 子ノードも兄弟ノードもなければ親の $node = $node->parent(); # 親ノードがbodyに戻っていたら終了 if ($node->tag == "body" ) break; $next = $node->nextSibling(); # 兄弟ノードが見つかるまでたどる } $node = $next; } echo "\n";
simple_html_domはその名の通りDOMを扱います。
なのでDOMの知識が必要です。
http://piyo-js.com/05/dom.html
http://www.ajaxtower.jp/js/dom/
http://hakuhin.jp/js/dom.html
やはりjavascriptでの説明が多いのですが、文法が若干違う程度でDOMとしては同じです。
ただ、simple_html_domはDOMのよく使う一部だけの実装なのと、独自名やjqueryの影響が見られますので、適宜読み替えなど必要です。
http://simplehtmldom.sourceforge.net/manual.htm
また、phpのもいくらか参考になります。
http://php.net/manual/ja/class.domnode.php
今後、本格的にDOMを扱う様であれば、phpのDOMのほか、SimpleXMLやXML パーサについても知っておくとお得かも知れません。
http://php.net/manual/ja/class.simplexmliterator.php
http://php.net/manual/ja/example.xml-map-tags.php
[追記]
裏技的なのを。
テキストとbodyタグと全ての閉じタグを消してしまいます。
#コメントは残るかもしれません。
<?php require "simple_html_dom.php"; $html = file_get_html('sample1.html'); function my_callback($element) { if ($element->tag == "text" ) $element->outertext = ""; if ($element->tag == "body") $element->_[HDOM_INFO_BEGIN] = -1; $element->_[HDOM_INFO_END] = 0; } $html->set_callback('my_callback'); echo $html->find("body", 0); echo "\n";
xpathとかもあるけどcssセレクタベースの方がわかりやすい。
確かに。
javascript 方面だと、document.querySelector メソッドが一番 使いやすいです。
ご丁寧な回答をいただきありがとうございます。
お正月に早速回答いただきありがとうございます。いつもすいません。
2016/01/03 11:59:45できました。
2016/01/03 12:00:27