2016-08-23 10 views
1

私はpleskから情報を返すためにplesk apiを使用しています。 それは、私は2次元配列に結果を置きたい何Plesk API XMLパッケージを配列に返す方法

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

のXML文字列など

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

文字列は、この情報を持っているに入れます。私は最初の名前になりたいと私はまた、ID

が必要

私はタグを取得するためにするpreg_matchを使用して試してみましたが、何らかの理由で私は最初のタグを取得しています。もちろん、関数はまだ2次元配列の中に入れていません。

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

これは私が名前に一致し、あなたが見るIDを得ることができるのでです。

私は、これは、XMLを解析するためだと思うが、それはパース得るように見えることができない、私はちょうど助けるかもしれない何かを発見したが、私はまだ

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

をそれを働いていないので、私は編集しています私の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のシリアライザコンポーネントを使用し、これを解決してきた、私はXMLに配列をコード化するAPIクライアントのメソッドを作成し、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'); 
} 
関連する問題