我如何 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');
}
我正在使用 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');
}