Разбор PHP ответа XML от API

У меня есть XML-ответ, из которого я пытаюсь извлечь отдельный элемент, вот ответ:

<GetProductStockResponse>
<GetProductStockResult>
<ProductStock>
<Product>
<sku>AA-HF461</sku>
<stock>23</stock>
</Product>
</ProductStock>
</GetProductStockResult>
</GetProductStockResponse>

Если я повторяю это на экране, отображается как:

AA-HF461 23

Я попытался использовать simplexml_load_string, но он не работает, ничего не выходит:

$res = $soapClient->GetProductStock($q_param);
$clfResponse = $res->GetProductStockResult;
echo $clfResponse; // This works - see above

$xml = simplexml_load_string($clfResponse);
echo $xml; // This is empty
echo $xml->stock; // This is empty

Я делаю ошибку школьника?

0

Решение

echo $xml напечатает строковое значение внешнего тега вашего XML. Так как GetProductStockResponse не имеет текстового содержимого, нет вывода. Если вы хотите вывести полный XML в виде строки, используйте

echo $xml->asXML();

echo $xml->stock; также будет пустым, так как внешний элемент не содержит <stock> тег. Если вы хотите углубиться в это, вам нужно получить к нему доступ через каждый уровень документа:

echo (int) $xml->GetProductStockResult->ProductStock->Product->stock; // 23

(Типы передачи важны при работе с элементами SimpleXML, см. этот ответ Больше подробностей)

Если вы хотите иметь доступ к элементам с любого уровня документа, вы можете использовать SimpleXML xpath метод, как это:

echo (int) $xml->xpath('//stock')[0]; // 23

Это напечатает первый <stock> элемент любого уровня документа, но в целом лучше ориентироваться в документе в соответствии с его структурой.

Наконец, если вы тестируете это через браузер, помните, что элементы XML не будут отображаться правильно, если вы не экранируете вывод:

echo htmlspecialchars($xml->asXML());
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector