Выбор значения атрибута с помощью PHP-пути - PullRequest
1 голос
/ 18 июня 2009

Я новичок в xpath и сталкиваюсь с проблемами с древней реализацией PHP XPath.Правильно ли, что //@url - это просто сокращенная форма //attribute::url?Я пытаюсь запросить flickr rss для тестирования, но сокращенный запрос находит правильные узлы, в то время как подробный возвращает 0 элементов:

$xml = file_get_contents('http://api.flickr.com/services/feeds/geo/?format=rss_200');
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
$xpath->query('//media:content/@url')->length > 0;
$xpath->query('//media:content/attribute::url')->length == 0;

Я неправильно понял спецификации w3c или это ошибка PHP?

Смежный вопрос:

Успешный запрос возвращает DOMAttr объектов, как и ожидалось.Но нет ли способа получить текстовое значение этих узлов напрямую?Что-то вроде //media:content/attribute::url/child::text()?Мне понадобится это для инструмента, в котором пользователи будут вводить запросы xpath, и обнаружение ошибок будет намного лучше, если бы я мог ожидать объекты DOMText (вместо кодирования множества объектов DOM *).

Ответы [ 2 ]

4 голосов
/ 18 июня 2009

похоже, что вы, вероятно, попали туда на жуке Это выглядит на 100% хорошо для меня.

Что касается вашего связанного вопроса, используйте оценивать вместо запроса, чтобы php попытался вернуть типизированный результат. в случае неудачи возвращает обычный список узлов

Edit:

Вы пытались добавить пространство имен ? media: part может бросить это в цикл. например,

$xpath->registerNamespace('media', "http://search.yahoo.com/mrss/");

Редактировать 2: просто для справки, я также попробовал это в JavaScript, используя следующий

function nsResolve() {
    return "http://search.yahoo.com/mrss/"
}

document.evaluate("//media:content/attribute::url",document,nsResolve,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

и работает так же, как при использовании @url (в настоящее время 7 результатов)

0 голосов
/ 16 октября 2009

Работает ли //*@url?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...