{"id":36,"date":"2008-08-31T19:54:14","date_gmt":"2008-08-31T23:54:14","guid":{"rendered":"http:\/\/www.compdigitec.com\/labs\/?p=36"},"modified":"2008-08-31T19:54:14","modified_gmt":"2008-08-31T23:54:14","slug":"domnodelist-as-an-array","status":"publish","type":"post","link":"http:\/\/www.compdigitec.com\/labs\/2008\/08\/31\/domnodelist-as-an-array\/","title":{"rendered":"DOMNodeList as an Array"},"content":{"rendered":"<p>When using getElementsByTagName, it returns a <a href=\"http:\/\/php.net\/domnodelist\" rel=\"nofollow\">DOMNodeList<\/a> which you can use with <a href=\"http:\/\/php.net\/foreach\" rel=\"nofollow\">foreach<\/a>, but you can&#8217;t use array indexes to access elements.<\/p>\n<p>For example, you can use the following code to the contents of the first &#8220;test&#8221; tag:<br \/>\n<code><span style=\"color: #000000;\"><br \/>\n<span style=\"color: #0000bb;\">&lt;?php<br \/>\n$file <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #dd0000;\">'z.xml'<\/span><span style=\"color: #007700;\">;<br \/>\n<\/span><span style=\"color: #0000bb;\">$xmlfile <\/span><span style=\"color: #007700;\">=\u00a0new <\/span><span style=\"color: #0000bb;\">DOMDocument<\/span><span style=\"color: #007700;\">();<br \/>\n@<\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">load<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$file<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">$iplist <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">getElementsByTagName<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #dd0000;\">'test'<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">$i <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #0000bb;\">0<\/span><span style=\"color: #007700;\">;<br \/>\nforeach(<\/span><span style=\"color: #0000bb;\">$iplist <\/span><span style=\"color: #007700;\">as <\/span><span style=\"color: #0000bb;\">$v<\/span><span style=\"color: #007700;\">)\u00a0{<br \/>\nif(<\/span><span style=\"color: #0000bb;\">$i <\/span><span style=\"color: #007700;\">== <\/span><span style=\"color: #0000bb;\">0<\/span><span style=\"color: #007700;\">)\u00a0{<br \/>\n<\/span><span style=\"color: #0000bb;\">var_dump<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$v<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">nodeValue<\/span><span style=\"color: #007700;\">);<br \/>\n}<br \/>\n<\/span><span style=\"color: #0000bb;\">$i<\/span><span style=\"color: #007700;\">++;<br \/>\n}<br \/>\n<\/span><span style=\"color: #0000bb;\">?&gt;<\/span><\/span><\/code><\/p>\n<p>Use this as z.xml:<br \/>\n<code>&lt;?xml version=\"1.0\" ?&gt;&lt;test&gt;Testing: hello, world&lt;\/test&gt;<\/code><\/p>\n<p>So as you can see, the $iplist variable is acting like an <a href=\"http:\/\/php.net\/array\" rel=\"nofollow\">array<\/a> (via foreach behaviour). But try this code:<br \/>\n<code><span style=\"color: #000000;\"><br \/>\n<span style=\"color: #0000bb;\">&lt;?php<br \/>\n$file <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #dd0000;\">'z.xml'<\/span><span style=\"color: #007700;\">;<br \/>\n<\/span><span style=\"color: #0000bb;\">$xmlfile <\/span><span style=\"color: #007700;\">=\u00a0new <\/span><span style=\"color: #0000bb;\">DOMDocument<\/span><span style=\"color: #007700;\">();<br \/>\n@<\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">load<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$file<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">$iplist <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">getElementsByTagName<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #dd0000;\">'test'<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">var_dump<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$iplist<\/span><span style=\"color: #007700;\">[<\/span><span style=\"color: #0000bb;\">0<\/span><span style=\"color: #007700;\">]-&gt;<\/span><span style=\"color: #0000bb;\">nodeValue<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">?&gt;<\/span><\/span><\/code><\/p>\n<p>The error &#8220;<strong>Fatal error: Cannot use object of type DOMNodeList as array in <\/strong><em>\/usr\/dev\/php5\/error.php<\/em><strong> on line 6<\/strong>&#8221; should occur. To fix this, use $iplist-&gt;item(0) instead of $iplist[0], though you can still use DOMNodeList with foreach. The following code should work:<br \/>\n<code><span style=\"color: #000000;\"><br \/>\n<span style=\"color: #0000bb;\">&lt;?php<br \/>\n$file <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #dd0000;\">'z.xml'<\/span><span style=\"color: #007700;\">;<br \/>\n<\/span><span style=\"color: #0000bb;\">$xmlfile <\/span><span style=\"color: #007700;\">=\u00a0new <\/span><span style=\"color: #0000bb;\">DOMDocument<\/span><span style=\"color: #007700;\">();<br \/>\n@<\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">load<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$file<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">$iplist <\/span><span style=\"color: #007700;\">= <\/span><span style=\"color: #0000bb;\">$xmlfile<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">getElementsByTagName<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #dd0000;\">'test'<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">var_dump<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">$iplist<\/span><span style=\"color: #007700;\">-&gt;<\/span><span style=\"color: #0000bb;\">item<\/span><span style=\"color: #007700;\">(<\/span><span style=\"color: #0000bb;\">0<\/span><span style=\"color: #007700;\">)-&gt;<\/span><span style=\"color: #0000bb;\">nodeValue<\/span><span style=\"color: #007700;\">);<br \/>\n<\/span><span style=\"color: #0000bb;\">?&gt;<\/span><\/span><\/code><\/p>\n<p>If you found this article helpful or useful, please help Compdigitec by spreading the word or by leaving a comment. Don&#8217;t forget to <a href=\"\/labs\/feed\/\">subscribe<\/a> to Compdigitec Labs for more interesting articles!<\/p>","protected":false},"excerpt":{"rendered":"<p>When using getElementsByTagName, it returns a DOMNodeList which you can use with foreach, but you can&#8217;t use array indexes to access elements. For example, you can use the following code to the contents of the first &#8220;test&#8221; tag: &lt;?php $file = &#8216;z.xml&#8217;; $xmlfile =\u00a0new DOMDocument(); @$xmlfile-&gt;load($file); $iplist = $xmlfile-&gt;getElementsByTagName(&#8216;test&#8217;); $i = 0; foreach($iplist as $v)\u00a0{ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[173,172,174,176,175,177],"_links":{"self":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/36"}],"collection":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/comments?post=36"}],"version-history":[{"count":0,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/36\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/media?parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/categories?post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/tags?post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}