0

我正在使用 API,但是他们设置返回的 XML 的方式不正确,所以我需要想出一个解析它的解决方案。我无法转换为 JSON(我的首选返回方法),因为他们不支持它。下面我列出了我的 XML 和 PHP。

API 返回的 XML

<?xml version="1.0" encoding="utf-8"?>
<interface-response>
    <Domain>example.com</Domain>
    <Code>211</Code>
    <Domain>example.net</Domain>
    <Code>210</Code>
    <Domain>example.org</Domain>
    <Code>211</Code>
</interface-response>

每个代码都用于前一个域。我不知道如何将这两者联系在一起,并且仍然能够遍历所有返回的结果。每个顶级域基本上都会返回一个域和一个代码,因此会产生很多结果。

到目前为止的PHP代码:

<?php
$xml = new SimpleXMLElement($data);
$html .= '<table>';
foreach($xml->children() as $children){
    $html .= '<tr>';
    $html .= '<td>'.$xml->Domain.'</td>';
    if($xml->Code == 211){
        $html .= '<td>This domain is not avaliable.</td>';
    }elseif($xml->Code == 210){
        $html .= '<td>This domain is avaliable.</td>';
    }else{
        $html .= '<td>I have no idea.</td>';
    }               
    $html .= '<tr>';
}
$html .= '</table>';
echo $html;
?>
4

1 回答 1

1

如果您不想处理蹩脚的 XML(我并不是说 XML 通常很蹩脚,但这个是)您可以考虑这样的事情:

<?php

$responses = [];
$responses['210'] = 'This domain is avaliable.';
$responses['211'] = 'This domain is not avaliable.';

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<interface-response>
    <Domain>example.com</Domain>
    <Code>211</Code>
    <Domain>example.net</Domain>
    <Code>210</Code>
    <Domain>example.org</Domain>
    <Code>211</Code>
</interface-response>
XML;

$data = (array) simplexml_load_string($xml);

$c = count($data['Domain']);
for($i = 0; $i < $c; $i++)
{
  echo $data['Domain'][$i], PHP_EOL;
  echo array_key_exists($data['Code'][$i], $responses) ? $responses[$data['Code'][$i]] : 'I have no idea', PHP_EOL;
}

输出

example.com
This domain is not avaliable.
example.net
This domain is avaliable.
example.org
This domain is not avaliable.
于 2013-09-06T01:15:16.800 回答