2016-08-23 11 views
1

Я использую plesk api для возврата информации из plesk. Он получает положить в XML-строки, напримерКак вернуть пакет API API Plesk в массив

$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> 

То, что я хочу, чтобы поместить результат в 2 одномерный массив.

Я хочу первое, чтобы быть имя, и я также нужен идентификатор

Я попытался с помощью preg_match, чтобы получить тег, но по какой-то причине я только получаю первый тег. И, конечно же, функция не помещает ее в 2-мерный массив.

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

Это значит, что я могу совместить имя и получить идентификатор, который вы видите.

я редактирую, потому что я только что нашел что-то, что могло бы помочь, но я не работал его еще

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

Я думаю, что это для разбора XML, но не могу показаться, чтобы получить его разобрать мой xml-пакет правильно.

Также попробовал этот

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

Но это не похоже на работу.

ответ

1

Я решил это сейчас

$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 
} 
0

Используя Symfony Serializer компонент, я создал метод в клиенте 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'); 
}