[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 メーリングリストの案内