如何将Plesk API XML包返回到数组

时间:2016-08-23 11:07:35

标签: arrays api packet plesk

我正在使用plesk api从plesk返回信息。 它被放入一个xml字符串,例如

$response = $client->request($request);

该字符串在

中包含此信息
<database>
<get-db>
<result>
<filter-id>domain name</filter-id>
<id>34</id>
<name>database</name>
<type>mysql</type>
...etc snip
</result>
<result>
<filter-id>domain name</filter-id>
<id>36</id>
<name>database</name>
<type>mysql</type>
...etc snip
</result>
</get-db>
</database>

我想将结果放入二维数组中。

我希望第一个成为名字,我也需要id

我尝试使用preg_match来获取标签,但出于某种原因我只获得了第一个标签。当然,功能还没有把它放在一个二维数组中。

function tags($string, $tagname)
{
    $pattern = "#<\s*?$tagname\b[^>]*>(.*?)</$tagname\b[^>]*>#s";
    preg_match($pattern, $string, $matches);
    return $matches;
}

这样我可以匹配名称并获得您看到的ID。

我正在编辑,因为我刚刚找到了可能会有所帮助的内容,但我还没有完成它

$xml=simplexml_load_string($response) or die("Error: Cannot create object");

我认为这是用于解析xml,但似乎无法正确解析我的xml包。

也尝试了这个

$data = simplexml_load_string($response);
echo $data->result[0]->name;

但这似乎不起作用。

2 个答案:

答案 0 :(得分:1)

我现在已经解决了这个问题

qo.exe --list-types

答案 1 :(得分:0)

使用Symfony Serializer Component,我在API客户端创建了一个方法,将数组编码为xml,发送到Plesk并将响应解码为数组。

/**
 * Encode array to XML, perform API request and
 * decode response to array.
 *
 * @param  array $data
 * @return array
 */
public function encodeAndRequest($data)
{
    $encoder = new XmlEncoder('packet');
    return $encoder->decode($this->request($encoder->encode($data, 'xml')), 'xml');
}