How would I check if an XML element exists?

Discussion in 'PHP' started by lefteh, Jan 28, 2009.

  1. #1
    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 />";
            }
    }
    Code (markup):
    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.
     
    lefteh, Jan 28, 2009 IP
  2. yoavmatchulsky

    yoavmatchulsky Member

    Messages:
    57
    Likes Received:
    3
    Best Answers:
    0
    Trophy Points:
    48
    #2
    $times = ...
    if ($times->length == 0)
    {
      continue;
    }
    PHP:
     
    yoavmatchulsky, Jan 29, 2009 IP