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

Sunami Marzzuo sunami @ marzzuo.info
2006年 9月 22日 (金) 21:52:50 JST


Marzzuoと申します。

nodeValueはメソッドではなくプロパティですので

echo $titles->nodeValue;

とすれば値を得られませんか?


Masuda wrote:

>伊藤様、ご返信ありがとうございます。
>
>
>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()
>と返ってきてしまいます。
>
>このグローバル関数はどのように使うのでしょうか?
>自力で解決できず申し訳ないのですが、ご助言いただければ幸いです。
>宜しくお願いします。
>
>
>増田
>  
>



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