|
Ускорить поиск по выражению XPATH | ☑ | ||
---|---|---|---|---|
0
TormozIT
14.12.23
✎
19:06
|
Есть выражение XPATH и текст 2млн символов, в котором надо найти все вхождения (1200шт). Oxygen XML Editor находит вхождения за 0.3сек.
А ДокументDOM находит их за 30 сек, т.е. в 100 раз медленней ДокументDOM.ВычислитьВыражениеXPath(Выражение, ДокументDOM, Разыменователь, ТипРезультатаDOMXPath.Строка) Вот выражение /e/e[1]/e//d[(position()=5 or position()=6) and starts-with(text(), '"') and text()!='""']/text() Есть идеи по ускорению поиска? |
|||
1
Волшебник
14.12.23
✎
19:08
|
Да вы охренели.... Сначала сделайте индекс
|
|||
2
NorthWind
14.12.23
✎
19:18
|
(0) это не для больших XML придумывалось.
|
|||
3
TormozIT
14.12.23
✎
19:35
|
Экспериментально выяснил что сумма поисков с фиксированной глубиной дает нужный результат за значительно меньшее время
/e/e[1]/e/*/*/*/*/*/*/*/*/d[(position()=5 or position()=6) and starts-with(text(), '"') and text()!='""']/text() |
|||
4
TormozIT
14.12.23
✎
19:36
|
Похоже неоптимально реализован просмотр динамической глубины "//"
|
|||
5
TormozIT
14.12.23
✎
19:48
|
В итоге ДокументDOM теперь решает задачу быстрее чем Oxygen XML Editor таким циклом
ф = 0; Для Счетчик = 0 По 8 Цикл Выражение = "/e/e[1]/e/" + ШаблонУровня + "d[(position()=5 or position()=6) and starts-with(text(), '""') and text()!='""""']/text()"; // Все элементы Разыменователь = Новый РазыменовательПространствИменDOM(Новый Соответствие); НаборУзлов = ДокументDOM.ВычислитьВыражениеXPath(Выражение, ДокументDOM, Разыменователь, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов); Пока Истина Цикл Узел = НаборУзлов.ПолучитьСледующий(); Если Узел = Неопределено Тогда Прервать; КонецЕсли; ф = ф + 1; КонецЦикла; ШаблонУровня = ШаблонУровня + "*/"; КонецЦикла; |
|||
6
TormozIT
14.12.23
✎
19:50
|
(5)+ Забыл строку в начале
ШаблонУровня = ""; |
|||
7
NorthWind
14.12.23
✎
20:18
|
супер, полезный лайфхак, надо запомнить на будущее. Иногда приходится ковырять хмли таким образом, хотя у меня обычно небольшие
|
|||
8
TormozIT
15.12.23
✎
09:04
|
Отправил отчет о проблеме разработчику https://www.hostedredmine.com/issues/977092
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |