从SimpleXMLElement对象中拉取值

时间:2018-02-24 02:47:27

标签: php arrays api simplexml namecheap

我正在使用namecheap API来做一些事情,这是我第一次使用API​​而且遇到了一些问题。

这是我到目前为止所做的:

$ApiKey = "**********************";
$ApiUser = "*****";
$UserName = "*********";
$ClientIP = "********";
$NamecheapURI = "https://api.namecheap.com/xml.response";

$executionURL = $NamecheapURI."?ApiUser=".$ApiUser."&ApiKey=".$ApiKey."&UserName=".$UserName."&Command=namecheap.domains.check&ClientIp=".$ClientIP."&DomainList=".$domain;

$xml = simplexml_load_file($executionURL);

print_r($xml);

当打印$ xml时,我返回了简单的XML对象:

  SimpleXMLElement Object
  (
  [@attributes] => Array
    (
        [Status] => OK
    )

  [Errors] => SimpleXMLElement Object
    (
    )

  [Warnings] => SimpleXMLElement Object
    (
    )

  [RequestedCommand] => namecheap.domains.check
  [CommandResponse] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [Type] => namecheap.domains.check
            )

        [DomainCheckResult] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [Domain] => facebook.com
                        [Available] => false
                        [ErrorNo] => 0
                        [Description] => 
                        [IsPremiumName] => false
                        [PremiumRegistrationPrice] => 0
                        [PremiumRenewalPrice] => 0
                        [PremiumRestorePrice] => 0
                        [PremiumTransferPrice] => 0
                        [IcannFee] => 0
                        [EapFee] => 0
                    )

            )

    )

  [Server] => PHX01APIEXT03
  [GMTTimeDifference] => --5:00
  [ExecutionTime] => 0.008
)

我的问题超出了这个范围,我如何前进并从中提取数据?

我已经尝试将其视为一个数组,但我无处可去,当使用is_array()测试它是否是一个数组时,它说它不是我不理解的......

如果这是一个菜鸟问题我道歉,我对此有点新意。简而言之,我需要做些什么来从中提取数据?

提前致谢!

1 个答案:

答案 0 :(得分:1)

学习使用SimpleXML比尝试将其转换为arrays / json /其他任何东西和简单(因此名称)要好得多。一个简单的例子......

$response = '<?xml version="1.0" encoding="UTF-8"?>
<CommandResponse Type="namecheap.domains.check">
    <DomainCheckResult Domain="facebook.com">
        <Element>1234</Element>
        <Element>12345</Element>
    </DomainCheckResult>
</CommandResponse>';
$xml = simplexml_load_string($response);

echo "DOmain=".$xml->DomainCheckResult['Domain'].PHP_EOL;
foreach ( $xml->DomainCheckResult->Element as $value)   {
    echo "Value=".(string)$value.PHP_EOL;
}

...输出

DOmain=facebook.com
Value=1234
Value=12345

您必须根据自己的XML进行调整,但想法是,如果要访问项目的元素,则使用对象表示法->,如果需要获取属性,请使用数组表示法{ {1}}。

因此,在上面的代码中,第一个echo([])获取$xml->DomainCheckResult['Domain']元素并输出Domain属性。

然后<DomainCheckResult>循环说取foreach内的每个<Element>并输出值。