[PHP-users 30412] Re: getElementByIdを使って特定要素のテキストノード取得

yusuke ito ito.ysk @ gmail.com
2006年 9月 22日 (金) 19:50:07 JST


伊東です。

http://jp.php.net/manual/ja/function.dom-domdocument-getelementbyid.php

のUser Contributed Notesに「DOMDocument->getElementById()は期待した結果を返さない」と書かれてますね。
で、代替のグローバル関数を提示してくれています。この関数は期待したとおりに動き、DOMElementオブジェクトを返してくれます
以下転載:
function getElementById(DOMDocument $doc, /*string*/ $id,
                       DOMNode $node = NULL) {
  if ($node === NULL) return getElementById($doc, $id, $doc->documentElement);
  $children = $node->childNodes;
  for ($i = 0; $i < $children->length; ++$i) {
   $elem = $children->item($i);
   if (!($elem instanceof DOMElement)) continue;
   if ($elem->getAttribute('id') == $id) return $elem;
   $ret = getElementById($doc, $id, $elem);
   if ($ret !== NULL) return $ret;
  }
  return NULL;
}


06/09/22 に Masuda<macindows @ forest.ocn.ne.jp> さんは書きました:
> http://www.php.net/manual/ja/function.dom-domdocument-getelementbyid.php
> こちらのgetElementByIDのマニュアルを参考に、
>
> echo $doc->getElementById('title')->tagName;
> echo $doc->getElementById('title')->nodeValue;
>
> を試みているのですが、何も返されない状態です。


PHP-users メーリングリストの案内