7

我怀疑我错过了一些非常基本和明显的东西,所以提前道歉!

我一直在使用simple_xml_loadXML 文件,但是我的客户的托管服务提供商阻止了通过这种方法加载外部文件。我现在正在尝试使用wp_remote_getWordPress 内置的功能来重建我的工作。

这是我的代码(注意:此示例中的密钥和庇护所 ID 是通用的):

$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);

使用它,我可以检索我需要的所有数据的数组,但我不知道如何定位特定数据。以下是来自的输出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>

例如,如果我想要echo状态码,我该怎么做?使用 simplexml,我会写$xml->header->status->code. 我似乎无法弄清楚使用wp_remote_get.

提前致谢!

4

1 回答 1

7

到目前为止,您的代码确实将 XML 作为字符串检索:

$url      = "http://api.petfinder.com/shelter.getPets?key=1234&count=20&id=abcd&status=A&output=full";
$response = wp_remote_get($url);
$body     = wp_remote_retrieve_body($response);

SimpleXMLElement要像以前一样将字符串(而不是 URL)加载到 a中simplexml_load_file(您没有显示具体代码,所以我假设您根据您的描述这样做了),您现在需要加载字符串simplexml_load_string

$xml  = simplexml_load_string($body);
$code = $xml->header->status->code;

我稍微更改了您的变量名称(尤其是wp_remote_*函数名称),以便更清楚地了解这些变量的含义。

于 2013-03-10T10:15:42.410 回答