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