I suspect I’m missing something really basic and obvious, so apologies in advance!
I had been using simple_xml_load
to work with an XML file, but my client’s hosting provider blocks the loading of external files through this method. I’m now trying to rebuild my work using the wp_remote_get
function built into WordPress.
Here’s my code (note: the key and shelter ID are generic in this example):
$url = "http://api.petfinder.com/shelter.getPets?key=1234&count=20&id=abcd&status=A&output=full";
$pf_xml = wp_remote_get( $url );
$xml = wp_remote_retrieve_body($pf_xml);
Using this, I can retrieve an array of all the data I need, but I cannot figure out how to target specific data. Here is what’s output from print_r($xml)
:
<petfinder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://api.petfinder.com/schemas/0.9/petfinder.xsd">
<header>
<version>0.1</version>
<timestamp>2013-03-09T15:03:46Z</timestamp>
<status>
<code>100</code>
<message/>
</status>
</header>
<lastOffset>5</lastOffset>
<pets>
<pet>
<id>13019537</id>
<name>Jordy</name>
<animal>Dog</animal>
</pet>
<pet>
<id>13019888</id>
<name>Tom</name>
<animal>Dog</animal>
</pet>
</pets>
</petfinder>
If I wanted to echo
the status code, for example, how would I do that? Using simplexml, I would write $xml->header->status->code
. I can’t seem to figure out what the code structure is to do something similar with arrays using wp_remote_get
.
Thanks in advance!
Your code so far does retrieve the XML as string:
To load a string (instead of a URL) into a
SimpleXMLElement
as you did before withsimplexml_load_file
(you didn’t show the concrete code so I assume you did it this way based on your description) you now need to load the string withsimplexml_load_string
instead:I slightly changed your variable names (especially with the
wp_remote_*
functions) to make it more clear for what those variables carry.