Jump to content

simplexml and parsing namespace with attributes


ngoweb

Recommended Posts

I have an xml file i am trying to parse with simplexml

 

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">

    <id>http://eventful.com/events/styx-and-foreigner-special-guest-kansas-/E0-001-029044011-4</id>

    <published>2010-03-10T08:05:18+00:00</published>

    <updated>2010-05-30T04:29:20+00:00</updated>

    <link href="http://eventful.com/events/styx-and-foreigner-special-guest-kansas-/E0-001-029044011-4" type="text/html" rel="alternate" />

    <gd:eventStatus value="http://schemas.google.com/g/2005#event.confirmed" />

    <gd:visibility value="http://schemas.google.com/g/2005#event.public" />

    <gd:transparency value="http://schemas.google.com/g/2005#event.transparent" />

    <title>Styx and Foreigner with special guest Kansas</title>

    <gd:when startTime="2010-06-07T18:30:00+00:00" endTime="2010-06-07T18:30:00+00:00" />

    <gd:where rel="http://schemas.google.com/g/2005#event" valueString="Chastain Park Amphitheater near  , Atlanta, Georgia, 30327, United States">

      <gd:entryLink>

        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">

          <id>http://eventful.com/venues/chastain-park-amphitheater-/V0-001-001274840-3</id>

          <link href="http://eventful.com/venues/chastain-park-amphitheater-/V0-001-001274840-3" type="text/html" rel="alternate" />

          <title>Chastain Park Amphitheater</title>

          <gd:contactSection label="Chastain Park Amphitheater">

            <gd:postalAddress>

Atlanta, Georgia  30327, United States</gd:postalAddress>

          </gd:contactSection>

 

The problem I am having is getting the start time of the event from this  <gd:when startTime="2010-06-07T18:30:00+00:00" endTime="2010-06-07T18:30:00+00:00" />

Any clues how i can do this?

Thanks all!

Link to comment
Share on other sites

It's hard to tell without having the actual XML to play with, but from what you shared I'd start with something like this"

 

<?php
$the_xml = file_get_contents('http://the_file.xml');
$feed = new SimpleXMLElement($the_xml);
$namespaces = $feed->getNamespaces(true);
foreach ($feed->entry as $entry) {
   $event = $entry->children($namespaces['gd']);
   echo "<p>Event = " . $entry->title . "<br />startTime = " . $event->when->startTime . " and endTime = " . $event->when->endTime . "</p>\n";
}
?>

Link to comment
Share on other sites

Actually, I forgot something. You need to get an attribute. Consider this example:

 

<?php
$the_xml = <<<FEED
<?xml version="1.0" encoding="UTF-8"?>    
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
  <id>http://eventful.com/atom/performers/bliminal-/P0-001-000192452-0</id>
  <link href="http://eventful.com/atom/performers/bliminal-/P0-001-000192452-0" type="application/atom+xml" rel="self" />
  <link href="http://eventful.com/performers/bliminal-/P0-001-000192452-0" type="text/html" rel="alternate" />
  <title>B-Liminal Tour Dates in 2009, B-Liminal Concert Schedule - Eventful</title>
  <subtitle>Up-to-date event feeds from eventful.com, the world's leading event website.</subtitle>
  <rights type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml">
      Copyright &#169; 2006
      <a href="http://eventful.com/">Eventful, Inc.</a>  All rights reserved.  Use subject to terms of use:
      <a href="http://eventful.com/terms">http://eventful.com/terms</a>
    </div>
  </rights>
  <generator version="1.0">EVDB::Atom</generator>
  <opensearch:totalResults></opensearch:totalResults>
  <opensearch:startIndex>1</opensearch:startIndex>
  <updated>2009-09-13T11:48:52+00:00</updated>
  <entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
    <id>http://eventful.com/jupiter/events/bliminal-free-fan-appreciation-show-/E0-001-024704319-1</id>
    <published>2009-09-13T15:09:00+00:00</published>
    <updated>2009-09-13T15:48:12+00:00</updated>
    <link href="http://eventful.com/jupiter/events/bliminal-free-fan-appreciation-show-/E0-001-024704319-1" type="text/html" rel="alternate" />
    <gd:eventStatus value="http://schemas.google.com/g/2005#event.confirmed" />
    <gd:visibility value="http://schemas.google.com/g/2005#event.public" />
    <gd:transparency value="http://schemas.google.com/g/2005#event.transparent" />
    <title>B-Liminal FREE fan appreciation show!</title>
    <gd:when startTime="2009-09-19T02:00:00+00:00" endTime="2009-09-19T02:00:00+00:00" />
    <georss:where>
      <gml:Point>
        <gml:pos>26.9342076 -80.0922588</gml:pos>
      </gml:Point>
    </georss:where>
    <gd:where rel="http://schemas.google.com/g/2005#event" valueString="Corners near 71 East Indiantown Road , Jupiter, Florida, 33458, United States">
      <gd:entryLink>
        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
          <id>http://eventful.com/jupiter/venues/corners-/V0-001-001473018-9</id>
          <link href="http://eventful.com/jupiter/venues/corners-/V0-001-001473018-9" type="text/html" rel="alternate" />
          <title>Corners</title>
          <georss:where>
            <gml:Point>
              <gml:pos>26.9342076 -80.0922588</gml:pos>
            </gml:Point>
          </georss:where>
          <gd:contactSection label="Corners">
            <gd:postalAddress>
              71 East Indiantown Road
              Jupiter, Florida  33458, United States
            </gd:postalAddress>
            <gd:geoPt lat="26.9342076" lon="-80.0922588" />
          </gd:contactSection>
          <content type="html">
            <div class='vcard'>
            <a class='fn org url uid' href='http://eventful.com/venues/V0-001-001473018-9'>Corners</a>
            <div class='adr'>
            <span class='street-address'>71 East Indiantown Road</span>, <span class='locality'>Jupiter</span>, <span class='region'>Florida</span> <span class='postal-code'>33458</span> <span class='country-name'>United States</span></div>
            </div>
          </content>
          <media:text type="html">
            <div class='vcard'>
            <a class='fn org url uid' href='http://eventful.com/venues/V0-001-001473018-9'>Corners</a>
            <div class='adr'>
            <span class='street-address'>71 East Indiantown Road</span>, <span class='locality'>Jupiter</span>, <span class='region'>Florida</span> <span class='postal-code'>33458</span> <span class='country-name'>United States</span></div>
            </div>
          </media:text>
          <category scheme="http://eventful.com/venues/tags/" term="americantowns" label="American Towns" />
          <category scheme="http://eventful.com/venues/tags/" term="americantownscom" label="americantowns.com" />
          <category scheme="http://eventful.com/venues/tags/" term="artistdatacom" label="artistdata.com" />
          <category scheme="http://eventful.com/venues/tags/" term="barnightclub" label="BarNight Club" />
          <category scheme="http://eventful.com/venues/tags/" term="community" label="community" />
          <category scheme="http://eventful.com/venues/tags/" term="local" label="local" />
          <category scheme="http://eventful.com/venues/tags/" term="townsquare" label="town square" />
          <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/g/2005#contact"  />
          <author>
            <name>evdb</name>
            <uri>http://eventful.com/users/evdb</uri>
          </author>
        </entry>
      </gd:entryLink>
    </gd:where>
</entry>
</feed>
FEED;
$feed = new SimpleXMLElement($the_xml);
$namespaces = $feed->getNamespaces(true);
foreach ($feed->entry as $entry) {
   $gd = $entry->children($namespaces['gd']);
   foreach($gd->when->attributes() as $k => $v)
   {
	$show_time[$k] = $v;
   }
   echo "<p>Event = " . $entry->title . "<br />startTime = " . $show_time['startTime'] . " and endTime = " . $show_time['endTime'] . "</p>\n";
}
?>

 

That should be more than enough to show you what you need to do to get at an attribute of an element that is inside a namespace.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.