Имя: Пароль:
1C
 
Ускорить поиск по выражению 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