我如何 return 一个 Plesk API XML 打包成一个数组

How do I return a Plesk API XML package into an array

我正在使用 plesk api 从 plesk 获取 return 信息。 它被放入 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>

我想把结果放到一个二维数组中。

我要第一个是name,还要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;

但这似乎不起作用。

我现在已经解决了

$response = $client->request($request); // Send query to Plesk host
echo $response; // show response

$xml = simplexml_load_string($response);


echo $xml->database->{'get-db'}->result[0]->name;
// This gets the first tag called name

//This loops through and gets every tag called name
foreach ($xml->database->{'get-db'}->result as $result)
{
   echo '<pre>'.$result->name.'</pre>';
//If I want to now I can put this result into an array here, but I find I do not need to now. As I only want to find the id of a matched database. So no array needed now, as I can use this loop
}

使用 Symfony 序列化程序组件,我在 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');
}