2

現在、Google連絡先APIから情報を取得しようとしています。ライブラリで提供されているサンプル コードの使用:

$response = json_encode(simplexml_load_string($val->getResponseBody())); 
$result = json_decode($response, true);

関数はsimplexml_load_string名前空間を取得しません。php.net を見て、パラメータを追加する方法を見て、少し迷っています。

$xml = json_encode(simplexml_load_string(null, $val->getResponseBody(), null, 'gd', true));

xml 文字列から「gd」名前空間を取得しようとすると、エラーが発生します。これを手伝ってくれる人はいますか?

出力エラーは次のとおりです。

simplexml_load_string() は、パラメーター 2 が SimpleXMLElement から派生したクラス名であることを想定しています

しかし、このエラーに加えて、必要な情報も正しく出力されます...混乱しています。

プルする必要がある情報の例:

<gd:extendedProperty xmlns:gs='http://schemas.google_apps_sync.com' name='google_apps_sync'>
    <gs:em_odn1>awalker@xxxxx.com</gs:em_odn1>
    <gs:em_dn1>First Name Last Name</gs:em_dn1>
    <gs:em_ad1>awalker@xxxxxxxxx.com</gs:em_ad1>
    <gs:em_t1>SMTP</gs:em_t1>
    <gs:f_c>32791</gs:f_c>
    <gs:f>Last, First</gs:f>
  </gd:extendedProperty>

編集

$xmlResponse = simplexml_load_string($val->getResponseBody(), null, 0, 'gd', true);
$xmlResponse->registerXPATHNamespace('gd', 'http://schemas.google_apps_sync.com');
$xmlResponse->registerXPATHNamespace('gs', 'http://schemas.google_apps_sync.com/contact/2008');

上記のコードにより、必要な名前空間にアクセスできますが、一度に 1 つだけです....たとえば:

$email = json_encode($xmlResponse->xpath('//gd:email'), true));
$postal = json_encode($xmlResponse->xpath('//gd:postalAddress'), true);
$name = json_encode($xmlResponse->xpath('//gs:em_dn1'), true);

$xmlResponseこれらの変数を印刷すると、必要なそれぞれの情報が得られますが、必要な名前空間を開始した後に元の変数にアクセスする方法はありませんか?

元:

json_decode($xmlResponse, true);

定義した名前空間の xml 情報を教えてくれません。

4

4 に答える 4

1

説明書に書いてある内容はこちら

PHP.NET

simplexml_load_file ( string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] )
$xml = simplexml_load_string($val->getResponseBody(),null, 0, 'gd', true);
$xml =json_encode($xml); 

アップデート

名前空間を正しく使用していません。すべての xml 構造を表示してください。

あなたが示した例では、名前空間gdは定義されていません。それを機能させるには、次のようなものが必要です。

<item xmlns:gd='http://schemas.google_apps_sync.com'> 
   <gd:extendedProperty xmlns:gs='http://schemas.google_apps_sync.com'..>
   ...
   </gd:extendedProperty>
</item>

今、あなたは使用することができます

$xml = simplexml_load_string($val->getResponseBody(),null, 0, 'gd', true);

gsそして、使用できる名前空間にアクセスしたい場合

$xml->registerXPathNamespace("gs", 'http://schemas.google_apps_sync.com');
于 2012-09-05T16:55:03.843 に答える
1

何時間もかけてスタックオーバーフローの情報を調べ、Google では比較的文書化されていないことを発見しました...?alt=json連絡先 API URI の末尾に追加すると、JSON で応答が返されます!

于 2012-09-11T03:41:50.497 に答える