Intereting Posts

XPath Substring-After Help / Query / Evaluate?

Я создаю 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 

демонстрация