PHPのDOM操作について質問です。

以下のようなDOM操作の流れで、aタグの中身(hoge_textやfoo_text)を<span></span>タグで囲うためにはどうすれば良いでしょうか?

<?php
mb_internal_encoding('UTF-8');

$sour =<<< EOT
<a href="hoge">hoge_text</a><a href="foo">foo_text</a><a href="bar">bar_text</a>
EOT;

//XMLにする
$sour = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<div>" . $sour . "</div>";

$doc = new DOMDocument();
$doc->loadXML($sour);
echo $doc->saveXML($doc);
?>

●実行結果のイメージ(aタグの内側にspanを付けたい)
<a href="hoge"><span>hoge_text</span></a><a href="foo"><span>foo_text</span></a><a href="bar"><span>bar_text</span></a>

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2009/05/27 16:43:32
  • 終了:2009/05/27 19:16:43

ベストアンサー

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752009/05/27 18:54:55

ポイント60pt

正確にやりたいことが分かりませんが、aタグ直下のテキストノードをspanで囲むだけなら次みたいな感じでしょうか。

そのままですが。

$anchors = $doc->getElementsByTagName("a");
for ($i = 0; $i < $anchors->length; ++$i) {
  $anchor = $anchors->item($i);

  $children = $anchor->childNodes;
  for ($j = 0; $j < $children->length; ++$j) {
    $child = $children->item($j);
    if ($child->nodeType == XML_TEXT_NODE) {
	  $element = $doc->createElement('span', $child->nodeValue);
	  $anchor->replaceChild($element, $child);
	}
  }
}

echo $doc->saveXML($doc);

慣れたら、マニュアル見ながらいろいろ試せるといいですね。

http://php.mirror.camelnetwork.com/manual/ja/book.dom.php

id:P-mako

ありがとうございます。できました。

2009/05/27 19:16:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません