lefteh Posted January 29, 2009 Share Posted January 29, 2009 My script: $feed = "http://www.mysite.com/feed.xml"; $doc = new DOMDocument(); $doc->load($feed); $entries = $doc->getElementsByTagName("entry"); $datesUsed = array(); foreach ($entries as $entry) { $status = $entry->getElementsByTagName("eventStatus"); $eventStatus = $status->item(0)->getAttributeNode("value")->value; if ($eventStatus == $confirmed) { $titles = $entry->getElementsByTagName("title"); $title = $titles->item(0)->nodeValue; $times = $entry->getElementsByTagName("when"); $startTime = $times->item(0)->getAttributeNode("startTime")->value; $date = date(" F j, Y", strtotime($startTime)); $time = date("g:i A", strtotime($startTime)); if (!in_array($date, $datesUsed)) { $currentnum = count($datesUsed); if ($currentnum > 0) echo "<br />"; echo "<strong>$date</strong><br />"; $datesUsed[$currentnum+1] = $date; $arrayyes = 1; } echo $title . " - $time<br />"; } } The script pulls out the “when” element and its attributes. The problem is that not every entry has a when element. How can I skip these records? I am aware of a hasAttribute function, but I can’t seem to find any equivalent for elements. I’ve played around with several techniques, and nothing has worked. If these entries are not skipped, the following error occurs: Fatal error: Call to a member function getAttributeNode() on a non-object Thanks in advance. Link to comment https://forums.phpfreaks.com/topic/142901-how-would-i-check-if-an-xml-element-exists/ Share on other sites More sharing options...
premiso Posted January 29, 2009 Share Posted January 29, 2009 <?php $feed = "http://www.mysite.com/feed.xml"; $doc = new DOMDocument(); $doc->load($feed); $entries = $doc->getElementsByTagName("entry"); $datesUsed = array(); foreach ($entries as $entry) { $status = $entry->getElementsByTagName("eventStatus"); $eventStatus = $status->item(0)->getAttributeNode("value")->value; if ($eventStatus == $confirmed) { $titles = $entry->getElementsByTagName("title"); $title = $titles->item(0)->nodeValue; $times = $entry->getElementsByTagName("when"); if (!is_object($times)) continue; // skip the rest of the loop if times is not an object $startTime = $times->item(0)->getAttributeNode("startTime")->value; $date = date(" F j, Y", strtotime($startTime)); $time = date("g:i A", strtotime($startTime)); if (!in_array($date, $datesUsed)) { $currentnum = count($datesUsed); if ($currentnum > 0) echo "<br />"; echo "<strong>$date</strong><br />"; $datesUsed[$currentnum+1] = $date; $arrayyes = 1; } echo $title . " - $time<br />"; } } ?> is_object test if $times is an object, if it is not skip the rest and continue the loop. Link to comment https://forums.phpfreaks.com/topic/142901-how-would-i-check-if-an-xml-element-exists/#findComment-749203 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.