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

Masuda macindows @ forest.ocn.ne.jp
2006年 9月 22日 (金) 20:43:51 JST


伊藤様、ご返信ありがとうございます。


On Fri, 22 Sep 2006 19:50:07 +0900
"yusuke ito" <ito.ysk @ gmail.com> wrote:
 
> 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;
> }
>
非常に基本的なことで申し訳ないのですが、
上記グローバル関数の使い方が理解できておらず、うまく処理できないのです。

$doc->getElementById('title')->tagName;
$doc->getElementById('title')->nodeValue;
このような使い方はできるのでしょうか?
tagNameのほうはわからないのですが、nodeValueに関しては、
Call to undefined method DOMElement::nodeValue()
とエラーが返ってきたので、使い方が間違っているのかもしれません。

function getElementById(DOMDocument $doc, /*string*/ $id, DOMNode $node = NULL) {
//中略
if ($node === NULL) return getElementById($doc, $id, $doc->documentElement);

引数を最低二つ取る必要があると思いますので、
$id = "title";
getElementById($doc, $title)としなければいけないのかなと思うのですが、
$titles = getElementById($doc,'title');
echo $titles->nodeValue();
このように引数を二つ取っても、
Call to undefined method DOMElement::nodeValue()
と返ってきてしまいます。

このグローバル関数はどのように使うのでしょうか?
自力で解決できず申し訳ないのですが、ご助言いただければ幸いです。
宜しくお願いします。


増田
-- 
Masuda <macindows @ forest.ocn.ne.jp>



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