XPath Substring-After Help / Запрос / Оценить?

1

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

Я не совсем уверен, как это сделать, но я буду исследовать больше утром. Опять же, любая помощь будет оценена.

  • 0
    На самом деле, xpath 1.0 имеет функцию substring-after() . Можете ли вы опубликовать минимальные коды, чтобы воспроизвести проблему ?
  • 1
    @ har07 Хорошо, я отредактировал главное сообщение с (как мне кажется, минимальными кодами). Пожалуйста, дайте мне знать, если вы можете помочь! Спасибо
Показать ещё 2 комментария
Теги:
xpath

1 ответ

0
Лучший ответ

Вы в правильном направлении. Используйте 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 

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

  • 0
    Woo! Я был очень близок, не так ли? Оказалось проще, чем я думал. В любом случае, это работает! Большое спасибо, хар.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню