PHP SimpleXMLElement XPath选择

时间:2012-05-08 01:23:56

标签: php xml simplexml

我有以下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还是错过了一些初始化步骤?

1 个答案:

答案 0 :(得分: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"));