|
выборка с xpath
|
|||
---|---|---|---|
#18+
как с помощью xpath получить содержимое записей, внутри которых имеется еще запись с требуемыми параметрами, но само значение записи нужно взять отличное от проверяемого ? сразу извиняюсь за терминологию, в xpath я не особо часто погружаюсь. попробую пояснить примером : Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
в этом примере мне нужно получить значение атрибута "456" рядом с которым присутствует findme , а 123 и 789 нужно пропустить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 07:05 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Ну если там только 1 или 2 записи с div, то можно так - выбираем все td, у которых у второго дива значение атрибута class - "findme", ну и потом берем первый div. я на SQL Server работаю, потому скрипт оттуда: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 09:38 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
StPatrick, так "нечестно". у меня не sql, а самый обычный xpath-парсер в perl. придется еще один дополнительный парсер инициализировать. я думаю можно одно выражение изобразить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 11:31 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
а что надо получить в результате? xml, где остались только нужные дивы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 12:40 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
StPatrick, я анализирую данные и СНОВА xml мне не нужен. мне нужен массив атрибутов href. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 13:04 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
/td[div[@class='findme']]/div[@class='data']/a/@href ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 13:15 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Antonariy, круто. а как подобная нотация называется? мне чтобы подробнее осознать и применять в дальнейшем ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 13:27 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
В смысле нотация? Это xpath-запрос, который ты просил, выбирающий то, что ты просил. Документация по xpath есть здесь , хотя в каких-то экзотических случаях отличия парсера FW4 от перловского по-любому будут. На всякий случай: перла не знаю, и куда ему воткнуть запрос, не ведаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 14:10 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwind, называется она XPath, описана, например, на w3.org чтобы ее осознать и постоянно с ней работать, нужен опыт, сначала писать простые XPath, потом будут получаться любые. основное применение XSL. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 14:11 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
AntonariyВ смысле нотация? /td[div[@class='findme']] - вот такой нотации я раньше не видел, не использовал и не нашел с ходу где описано то, что внутри скобок [] можно просто указать еще одно выражение xpath. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 20:45 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwindAntonariyВ смысле нотация? /td[div[@class='findme']] - вот такой нотации я раньше не видел, не использовал и не нашел с ходу где описано то, что внутри скобок [] можно просто указать еще одно выражение xpath.Вообще термин "нотация" здесь если куда и подходит, то к самому xpath, а [[]] — конструкция этой нотации. Я ее видел среди примеров здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 22:02 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Antonariy, теперь и я видел. но где конкретно в документации это разрешено? всякие там функции в скобках [] - этого навалом ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 23:52 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwind, Вы доку то читали? http://www.w3.org/TR/xpath/ специально полез, думал чего не написано... так ведь нет, про то что [position() = 1] можно писать как [1], про то что [cond1][cond2] аналогично [cond1 and cond2] тоже есть, про то что в скобках [] указывается любое выражение, которое в состоянии вернуть boolean и то написано. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2011, 16:47 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
mage.lan, Там вроде нет про вложенные квадратные скобки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2011, 17:44 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Почитайте про преобразование node-set в boolean ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2011, 20:17 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Снова принципиальная непонятка, которую чтением списка функций не удалось решить. Хочется покрасивее обойти ситуацию отсутствующего поля Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Я обрабатываю это xpath-выражением "//phone" и получаю массив из двух значений phone. Какое должно быть выражение, чтобы вернулось и пустое поле тоже? То есть, массив из трех значений с одним пустым. Разумеется, структура упрощена, но смысл тот же. Переделывать на педальный двухуровневый парсинг записей (сначала выделить записи P, а потом парсить каждую ) мне невыгодно из-за особенностей построения программы. Для читаемости нужно сосредоточить все xpath-выражения в одном месте ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 03:49 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwind, очевидно, что ваш икспас должен быть /p и никак по другому, нельзя выбрать то, чего нет. если вы шире опишите свою задачу, мы подумаем, как красиво написать xsl ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 12:20 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
mage.lan, понимаю. Но разве нельзя отсутствующие элементы выбрать, например, как пустую строку? Конечно же хотелось бы в принципе подобные задачи решать красиво. Конкретно сейчас это парсинг текущей структуры html яндекс-каталога. В некоторых позициях есть телефон, а в некоторых нет. Соответственно, я выбираю например упорядоченный массив названий, которые есть всегда, одним выражением и рядом пытаюсь выбрать другим выражением упорядоченный (!) массив телефонов. Дальше обрабатываю и тут мне нужно сопоставить названия и телефоны. Вероятно, я мог бы переписать это в два уровня - сначала выделить элементы одним выражением, а другим набором выражений обрабатывать каждый, но мне удобней сразу список с полями получить. Неужели это совсем не как у всех ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 12:34 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
Вроде это похоже на вашу задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 12:47 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwind, совсем. могу только посоветовать следующее если микрософт объявляем пространство имен msxsl Код: xml 1. 2. 3. 4.
далее перед использованием создаем переменную Код: xml 1. 2. 3. 4. 5. 6. 7.
Далее переводим ее в фрагмент дерева, если микрософт Код: xml 1.
если не микрософт - читайте инструкцию к трансформеру, в том или ином виде функция node-set (nodeset) есть у всех XSLT Переменная будет содержать то, что вы хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 12:50 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
mage.lan, да у меня нет трансформера и мало смысла их вообще осваивать. Модуль получает набор xpath-выражений и создает удобные структуры данных в языке. Я просто хочу получить массивы для дальнейшей обработки без xml. Мне не надо из ентерпрайза в другой что-то отправлять. Все у меня просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 12:56 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
mage.lan, я правильно понимаю что если я попробую погрузитьс в трансформацию с XSLT, то пойму о чем вы говорите и приведу исходный html к более удобному для разбора теми методами, которые мне удобнее? Я использую perl и Web::Scraper. Код очень простой и компактный. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 13:18 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
netwind, Увы, я не знаю, что такое Web::Scraper, помочь не смогу. А Яндекс-каталог как-нибудь еще получить можно? в виде нормального xml или json? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 16:19 |
|
выборка с xpath
|
|||
---|---|---|---|
#18+
mage.lan, perl вообще мало кто использует поэтому я и пояснил как такой парсер оперирует. в данной ситуации набор выражений для Web::Scraper выглядит так . некоторые странные символы в xpath - последовательности для экранировани. Последовательность \' - экранирует одиночную кавычку. Код: php 1. 2. 3. 4. 5.
То есть, будет создан массив names и еще массив phones, где число элементов меньше чем нужно, потому что совпадения не нашлось. Ну а третье выражение позволяет мне просто получить кусок html (RAW) в массив elements, который я потом более традиционными для perl методами выбираю данные. Т.е. практическую задачу я давно решил. Теперь интересует более изящная методика. Есть ли у яндекса json или xml в сущности не важно. И так, если в xml отсутствуют поля в записей, могу я с помощью каких-либо xslt-преобразований их добавить с пустыми значениями? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 16:54 |
|
|
start [/forum/topic.php?fid=14&msg=37583019&tid=1332582]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 184ms |
0 / 0 |