0

私は次のXMLを持っています:http://pastebin.com/QiRK72BK

これは、RESTクエリに応答して生成されます。私のコードは非常に単純です:

$xml = simplexml_load_file($url);

var_dump($xml->getName());

var_dump($xml->xpath("serverDetail/apiEnv"));

試みられたテストケースで。最初のvar_dumpは、XMLファイルが実際にロードされていることを示しています。

 string(21) "GeneralSearchResponse"

しかし、2番目のvar_dumpは私を困惑させます。確かにいくつかのデータと一致するはずだと思いますが、代わりに

array(0) { }

また、xpath "/ serverDetail / apiEnv" "//apiEnv"と"/"を試しましたが、常に空の配列を取得します。xpathを誤解しているのでしょうか、それとも初期化手順が欠落しているのでしょうか。

4

1 に答える 1

2

XML は名前空間を使用しています:

$xml->registerXPathNamespace('u', 'urn:types.partner.api.shopping.com');
var_dump($xml->xpath("//u:serverDetail/u:apiEnv"));

出力:

array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (1) {
    [0]=>
    string(7) "sandbox"
  }
}

編集:汚い回避策ですが、役立つかもしれません:

$xml = simplexml_load_file($url);
$xmlStr = str_replace("xmlns", "ns", $xml->asXML());
$xml = new SimpleXMLElement($xmlStr);
var_dump($xml->xpath("serverDetail/apiEnv"));
于 2012-05-08T02:25:23.883 に答える