Используя PHP, я обращаюсь к API. Я использую для этого curl, и ответ должен быть в формате XML. Но ответ на мой звонок - это строка, содержащая XML-контент. Поэтому я хотел разобрать его с помощью simplexml_load_string. Но затем я получаю пустой объект:
object(SimpleXMLElement)#839 (0) { }
Это мой призыв:
$curl = curl_init($this->api_base . $this->endpoint);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt($curl, CURLOPT_USERPWD, $this->get_auth_string());
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/xml',
'Accept: application/xml',
'Connection: Keep-Alive'
]);
$response = curl_exec($curl);
$curl_error = curl_error($curl);
curl_close($curl);
Что не так с этим? Как я могу получить реальный XML для прохождения через цикл?
Это похоже на результат, который вы получили бы, если бы вы запустили simplexml_load_string над одним пустым XML-элементом (например, <foo />) - если бы ваш вызов Curl вообще не возвращал XML, вы бы получили false вместо объекта. Действительно ли ценность $response соответствует вашим ожиданиям? Важно отметить, что использование встроенных инструментов отладки, таких как var_dump, - плохая идея, поскольку они не дают вам полного представления об объекте. Вы также могли бы увидеть это, если бы ваш документ был помещен в пространство имен, см. stackoverflow.com/questions/44894426/…
@iainn да, ответ (строка) - это именно то, что я ожидал, и правильный полный XML-документ
@lovelace: Я думаю, этот код похож на мой ... но мой не работает
@ FZC3 Похоже, тогда это пространство имен. var_dump не будет отображать дочерние элементы и атрибуты XML-документа с пространством имен, но это не означает, что их там нет (см. eval.in/1028340). Вам нужно использовать внутренние функции SimpleXML для его анализа - ссылка на другой вопрос, который я опубликовал выше, содержит гораздо больше деталей.
Ответ @iainn: <search:search-result xmlns:seller = "http://services.mobile.de/schema/seller" xmlns:ad = "http://services.mobile.de/schema/ad" xmlns:search = "http://services.mobile.de/schema/search" xmlns:financing = "http://services.mobile.de/schema/common/financing-1.0" xmlns:resource = "http://services.mobile.de/schema/resource" xmlns:error = "http://services.mobile.de/schema/common/error-1.0"><search:total>2</search:total><search:page-size>20</search:page-size><search:max-pages>1</search:max-pages><search:ads>...</search:ads></search:search-result> ----- Мне нужно зациклить <поиск: объявления>
@iainn Я пробовал использовать пространства имен, как в вашем примере, но цикл ничего не выводит ...






проверьте это: stackoverflow.com/questions/561816/…