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"

然而,第二个 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 回答