powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Найти пересечение результатов двух запросов
13 сообщений из 13, страница 1 из 1
Найти пересечение результатов двух запросов
    #38645159
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Есть 2 запроса:

Код: c#
1.
//tr[td[text()='john.doe@acme.com']]/following-sibling::tr


Отыскивает ноды, которые расположены после нужной мне

Код: c#
1.
//tr[td[text()='john.doe@acme.com']]/following-sibling::tr[td[contains(text(), '@')]][1]//preceding-sibling::t


Отыскивает ноды, которые расположены перед нодой, которая находится сразу после ноды, нужной мне

Можно ли составить XPATH запрос, который бы вывел пересечение множеств нод?
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645194
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если похожего результата можно добиться, создав промежуточный код, то тоже пишите
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645212
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос,

Первый запрос включает в себя все узлы второго запроса. Поэтому выполняйте второй запрос, как более строгий, и будет Вам счастье
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645237
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, счастья не будет, т.к. оба запроса получают много лищних данных, которые потом нужно парсить дополнительно. Одно дело, если мы парсим нужные нам данные, другое дело, когда мы парсим еще и данные, которые нам не нужны

Возможно, я не с той стороны зашел. Есть таблица со структурой

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<tr>
<td>Email</td>
<td>City</td>
<td>Notes</td>
</tr>
<tr>
<td>john.doe@acme.com<;/td>
<td>city1</td>
<td>none</td>
</tr>
<tr>
<td>city2</td>
<td>none</td>
</tr>
<tr>
<td>karl.doe@acme.com<;/td>
<td>city3</td>
<td>none</td>
</tr>



Соответсвенно, надо выбрать все города пользователя john.doe.
Мне никак не приходит на ум запрос, который может вернуть строки, начиная от строки с емейлом нужного юзера, заканчивая строкой с емейлом следующего юзера
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645257
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос,

Вам, в итоге, нужно собрать информацию для КАЖДОГО пользователя? Или только для одного?
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645265
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос,

И еще вопрос - это у Вас задача по XSL?
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645306
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Жентос,
Вам, в итоге, нужно собрать информацию для КАЖДОГО пользователя? Или только для одного?
Для одного. Трудности такие:
- таблица разнородная (в строке с емейлом 10 ячеек, в строке без емейла 5)
- нет разметки для строк (ни id, ни стилей), только текст

_Vasilisk_Жентос,
И еще вопрос - это у Вас задача по XSL?
Нет. Есть фреймворк, который выдает данные элементов по запросу XPath, попавших в выборку. Мне надо получить запросом все элементы <tr> из указанного диапазона, чтобы отдать их фреймворку
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645832
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос,

Код: xml
1.
tr[td = 'john.doe@acme.com'] | tr[td = 'john.doe@acme.com']/following-sibling::tr[contains(td, '@')]/preceding-sibling::tr


Кажись так
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645833
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

я проверял, "|" работает как объединение :(

Я решил задачу топорно. В теге <td> есть аттрибут RowSpan, а дальше можно уже работать прямыми запросами.
Конечно, это не самое элегантное решение, но намного лучше прямого перебора всей таблицы (так реализовано сейчас, этот процесс может занимать минут 30 времени)
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645847
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос"|" работает как объединение :(Правильно. Вы проверяли мой код полностью?
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38645848
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жентос,

И еще правило, которое использую я сам, - если XML неудобно обрабатывать, то его нужно преобразовать, при помощи XSL, к удобной структуре. Но это на будущее. Сейчас же 16040296 должно сработать
Жентос(так реализовано сейчас, этот процесс может занимать минут 30 времени)Вы чаще используйте оператор // Может быть достигните времени в час.

Оператор // - это самый тормозной оператор и его нельзя использовать никогда . В крайнем случае, если структура недетерминирована (что бывает крайне редко), используют .//
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38646393
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Жентос"|" работает как объединение :(Правильно. Вы проверяли мой код полностью?
Да. Если присмотреться, то в первом посте топика есть 2 Xpath-запроса. Если их объединить через |, то получится Ваш запрос. Он возвращает всю таблицу, т.к. объединяются результаты выше и ниже строки с указанным емейлом. Это могло работать, если бы существовала операция пересечения результатов. Но такой операции, на сколько я уже знаю, нет.

_Vasilisk_Жентос,
И еще правило, которое использую я сам, - если XML неудобно обрабатывать, то его нужно преобразовать, при помощи XSL, к удобной структуре. Но это на будущее. Сейчас же 16040296 должно сработать
У меня фреймворк-вегетарианец, он xsl не кушает. Перевоспитать его не получится, т.к. это dll без исходного кода

_Vasilisk_Жентос(так реализовано сейчас, этот процесс может занимать минут 30 времени)Вы чаще используйте оператор // Может быть достигните времени в час.
Оператор // - это самый тормозной оператор и его нельзя использовать никогда . В крайнем случае, если структура недетерминирована (что бывает крайне редко), используют .//
Сайт на smart gwt, разработка ведется другой командой, так что структура действительно недетерминированна. А насчет часа вы преувеличиваете. Developer Tools выполняют запросы с "//" достаточно быстро, у фреймворка внутренние задержки больше, чем длительность такого поиска
...
Рейтинг: 0 / 0
Найти пересечение результатов двух запросов
    #38646528
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖентосУ меня фреймворк-вегетарианец, он xsl не кушает.Взять сторонний процессор
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Найти пересечение результатов двух запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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