Я создаю php-скрипт для переноса выбранного содержимого XML файла в базу данных sql.
Одно из жестко закодированных XML-материалов форматируется следующим образом:
<visualURL>
id=18144083|img=http://upload.wikimedia.org/wikipedia/en/8/86/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://upload.wikimedia.org/wikipedia/en/9/96/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-> оценку вместо текущего использования запроса $xpath->
см. эту ссылку. Тот же запрос XPath работает с документами Google, но не PHP
Я не совсем уверен, как это сделать, но я буду исследовать больше утром. Опять же, любая помощь будет оценена.
Вы в правильном направлении. Используйте DOMXPath :: evaluation() для выражения xpath, который не возвращает узлы (узлы), такие как substring-after()
(он возвращает string
как описано на связанной странице). Следующие коды печатают ожидаемый результат:
$xmlDoc = new DOMDocument();
$xml = <<<XML
<Playlist>
<PlaylistEntry>
<visualURL>
id=12582194|img=http://upload.wikimedia.org/wikipedia/en/9/96/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://upload.wikimedia.org/wikipedia/en/9/96/Sometime_around_midnight.jpg
substring-after()
. Можете ли вы опубликовать минимальные коды, чтобы воспроизвести проблему ?