Я создаю php-скрипт для переноса выбранного содержимого XML-файла в базу данных sql.
Одно из жестко закодированных XML-материалов форматируется следующим образом:
<visualURL> id=18144083|img=http://img.ruphp.com/php/Holyrollernovacaine.jpg </visualURL>
И я ищу способ получить содержимое URL-адреса (весь текст после img =).
$Image = $xpath->query("substring-after(/Playlist/PlaylistEntry[1]/visualURL[1]/text(), 'img=')", $element)->item(0)->nodeValue;
Отображает ошибку объекта без объекта на моем php-выходе.
Должен быть другой способ просто извлечь содержимое URL, используя XPath, который я хочу, нет?
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ:
Вот минимальный код
<?php $xmlDoc = new DOMDocument(); $xmlDoc->loadXML('<Playlist> <PlaylistEntry> <visualURL> id=12582194|img=http://img.ruphp.com/php/Sometime_around_midnight.jpg </visualURL> </PlaylistEntry> </Playlist>'); $xpath = new DOMXpath($xmlDoc); $elements = $xpath->query("/Playlist/PlaylistEntry[1]"); if (!is_null($elements)) foreach ($elements as $element) $Image = $xpath->query("substring-after(/Playlist/PlaylistEntry[1]/visualURL[1]/text(), 'img=')", $element)- >item(0)->nodeValue; print "Finished Item: $Image"; ?>
EDIT 2:
После некоторых исследований я считаю, что я должен использовать $ xpath-> evaluation вместо текущего использования запроса $ xpath->
см. эту ссылку. Тот же запрос XPath работает с документами Google, но не PHP
Я не совсем уверен, как это сделать, но я буду исследовать больше утром. Опять же, любая помощь будет оценена.
Вы в правильном направлении. Используйте DOMXPath :: evaluation () для выражения xpath, который не возвращает узлы (узлы), такие как substring-after()
(он возвращает string
как описано на связанной странице). Следующие коды печатают ожидаемый результат:
$xmlDoc = new DOMDocument(); $xml = <<<XML <Playlist> <PlaylistEntry> <visualURL> id=12582194|img=http://img.ruphp.com/php/Sometime_around_midnight.jpg </visualURL> </PlaylistEntry> </Playlist> XML; $xmlDoc->loadXML($xml); $xpath = new DOMXpath($xmlDoc); $elements = $xpath->query("/Playlist/PlaylistEntry"); foreach ($elements as $element) { $Image = $xpath->evaluate("substring-after(visualURL, 'img=')", $element); print "Finished Item: $Image <br>"; }
вывод :
Finished Item: http://img.ruphp.com/php/Sometime_around_midnight.jpg
демонстрация