powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xpath парсинг feed Atom
25 сообщений из 36, страница 1 из 2
xpath парсинг feed Atom
    #37950516
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет

не могу до конца разобраться с парсингом фида от Яндекс Фоток с помощью SimpleXML

получаемый feed ведет себя не как обычный xml

вот линк на фид http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/

как мне получить один единственный entry название которого "Свинцовый полет на пасмурным морем" ?

по идее должно сработать так =
Код: php
1.
2.
3.
$xml = simplexml_load_file("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$fg = $xml->xpath("/feed/entry[title='Свинцовый полет на пасмурным морем']");
print_r($fg);



но эта схема срабатывает только если, заменить строку
Код: xml
1.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:f="yandex:fotki">



на такой вариант =
Код: xml
1.
2.
<?xml version="1.0" encoding="UTF-8"?>
<feed>



как правильно распарсить родной фид от Яндекс Фоток ?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950524
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
/*/*[title='Свинцовый полет на пасмурным морем']
Работает?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950531
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
нет...
получаю пустой массив
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950700
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboy,

у некоторых парсеров - сложно со строками, проверяйтее с помошью contains или starts-with

Код: sql
1.
/feed/entry[contains(title/text(),'Свинцовый полет на пасмурным морем')]
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950714
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,
не помогло...

вообще я выявил такую закономерность: ключевым фактором НЕ ПОЛУЧЕНИЯ нужно результата является декларирование пространства имен =
Код: xml
1.
xmlns="http://www.w3.org/2005/Atom"



достаточно вместо
Код: xml
1.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:f="yandex:fotki">


сделать
Код: xml
1.
<feed xmlns:app="http://www.w3.org/2007/app" xmlns:f="yandex:fotki">


как это
Код: xml
1.
2.
3.
$xml = simplexml_load_file("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$fg = $xml->xpath("/feed/entry[title='Свинцовый полет на пасмурным морем']");
print_r($fg);


начинает работать...

как обойти обьявление пространства имен в узле feed ?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950737
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyкак обойти обьявление пространства имен в узле feed ?
На надо ничего обходить. Ищи примеры как в simplexml работать с пространством имен по умолчанию. Тебе нужно сказать ему что документ использует пространство имен http://www.w3.org/2005/Atom, назначить ему префикс - например atom, и начать писать xpath запросы вида
Код: php
1.
$xml->xpath("/atom:feed/atom:entry[title='Свинцовый полет на пасмурным морем']");
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950785
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,
спасибо, почти помогло, но все равно затыка...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?php
$xml = simplexml_load_file("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$xml->registerXPathNamespace('c', 'http://www.w3.org/2005/Atom'); 

echo "<pre>";
$fg = $xml->xpath("/c:feed/c:entry"); // работает
$fg = $xml->xpath("/c:feed/c:entry[title='Свинцовый полет на пасмурным морем']"); // не работает
print_r($fg);
echo "</pre>";

?>



теперь ему чего не хватает?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950824
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще ближе к цели получилось в таком случае =
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?php
$xml = simplexml_load_file("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$xml->registerXPathNamespace('c', 'http://www.w3.org/2005/Atom'); 
echo "<pre>";
$fg = $xml->xpath("/c:feed/c:entry[c:title='Предшлюз с чайком и красивым лишайником']");
print_r($fg);
echo "</pre>";
?>


но из entry почему-то исключены узлы f:img
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    <f:created>2008-08-09T03:09:24Z</f:created>
    <f:access value="public" />
    <f:xxx value="false" />
    <f:hide_original value="false" />
    <f:disable_comments value="false" />
    <f:img height="75" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_XXS" size="XXS" width="75" />
    <f:img height="800" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_XL" size="XL" width="600" />
    <f:img height="300" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_M" size="M" width="225" />
    <f:img height="500" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_L" size="L" width="375" />
    <f:img height="50" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_XXXS" size="XXXS" width="50" />
    <f:img height="150" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_S" size="S" width="113" />
    <f:img height="100" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_XS" size="XS" width="75" />
    <f:img bytesize="0" height="800" href="http://img-fotki.yandex.ru/get/36/styleroom.9/0_188ee_b960693e_orig" size="orig" width="600" />
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950826
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть entry вернулся не полностью...
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950855
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
$xml->registerXPathNamespace('f', 'yandex:fotki'); 
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950865
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
спасибо, но - не вылечило...
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950876
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: php
1.
$xml->registerXPathNamespace('f', 'yandex:fotki'); 



вот так вернулись только узлы f:img - то есть пришлось второе пространство имен регистрировать
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$xml = simplexml_load_file("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$xml->registerXPathNamespace('c', 'http://www.w3.org/2005/Atom'); 
$xml->registerXPathNamespace('f', 'yandex:fotki');

echo "<pre>";

$fg = $xml->xpath("//*[c:title='Предшлюз с чайком и красивым лишайником']/f:img");
print_r($fg);

echo "</pre>";



но получить весь entry целиком - пока не судьба...
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950891
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ты же и выбрал только /f:img
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950897
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C двумя registerXPathNamespace должно так сработать:

Код: plaintext
//*[c:title='Предшлюз с чайком и красивым лишайником']
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950901
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТак ты же и выбрал только /f:img
это да, это я понимаю :) - для проверки что второе пространство имен работает
но полный энтри все равно не могу получить - как бы ни комбинировал два неймспейса :(
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950909
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyC двумя registerXPathNamespace должно так сработать:

Код: plaintext
//*[c:title='Предшлюз с чайком и красивым лишайником']


неа... не пашет...

entry возвращается без f:img
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950959
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyentry возвращается без f:imgПохоже на багу SimpleXML. Попробуйте использовать DOMDocument
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37950981
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Попробуйте использовать DOMDocument
не подскажете - как с его помощью сделать такой запрос?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951071
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
$dom = new DOMDocument();
$dom-load("http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/");
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('c', 'http://www.w3.org/2005/Atom');
$fg = $xpath->query("/c:feed/c:entry[c:title='Свинцовый полет на пасмурным морем']");
print_r($fg);


Как-то так
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951103
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Как-то так
спасибо!
вернулся объект DOMNodeList Object ( )
его как перебирать?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951179
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем большое спасибо, коллеги!

задачу решил не оптимально с точки зрения применения родного подхода... :)

сохраняю фид яндекс фоток во временный файл
проставляю просто <feed> вместо родного яндексовского с xmlns
и препарирую уже чистый xml из временного файла
временный файл после парсинга удаляю
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951249
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyего как перебирать? Тынц
buyboyсохраняю фид яндекс фоток во временный файлИзвините, но этим вы мало того, что выполняете лишнюю работу, так еще и подкладываете себе (или тому, кто это будет сопровождать) охрененные грабли. Но Вам виднее
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951270
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ охрененные грабли
в чем они заключаются?
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951286
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyв чем они заключаются?
В потере возможности делать xpath запросы через неймспесы.
...
Рейтинг: 0 / 0
xpath парсинг feed Atom
    #37951305
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileВ потере возможности делать xpath запросы через неймспесы.
хм...
а в чем фишка делать запросы через нэймспесы - если без них проще?
фид же формируется яндексом - там ошибок быть не может
моя задача - распарсить готовое...

ей-ей пока не понял про плюсы запросов с использованием нэймспесов

растолкуйте поподробнее, если есть желание
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xpath парсинг feed Atom
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]