Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   построение XPath выражения (https://javascript.ru/forum/misc/3028-postroenie-xpath-vyrazheniya.html)

endryha 11.03.2009 13:38

построение XPath выражения
 
Вообщем задача такая что нужно построить XPath выражение к конкретному елементу на html странице например по событию onClick. Может быть кто нибуть сталкивался с такой задачей? Я так подозреваю возможно есть уже готовые решения в каких нибуть javascript фреймвёрках? Заранее спасибо.

Gvozd 11.03.2009 14:10

не совсем ясна формулировка задачи, и конечная цель применения.
уточните если я неправильно понял
[telepatmode]
вы хотите, чтобы по клику на элементе у вас в кукую-нибудь переменную выводился XPath-путь до этого элемента.
Необходимо уточнение, что до любого элемента есть БЕСКОНЕЧНОЕ множество XPath-путей.Из них достаточно большое количество приемлимой длины.а оптимальных из них еденицы(и то смотря что понимать под оптимальностью)
Приведу вариант для построения самого простого "неумного" XPath-пути
function get_xpath(node)
	{
	var num,sibling;
	if(node.parentNode != undefined)
		{
		sibling=node.parentNode.getElementsByTagName(node.tagName);
		for(num=0;num<sibling.length;num++)
			if(node==sibling[num])
				break;
		return get_xpath(node.parentNode)+"/"+node.tagName+"["+(num+1)+"]";
		}
	else
		return "/";
	}

вроде бы все правильно написал, попробуйте.
вот HTML_ка для теста
<html>
<head>
<title>Выберите</title>
</head>
<body>
<span onclick="alert(get_xpath(this))">asdsad</span>
</body>
</html>


[/telepatmode]

endryha 11.03.2009 14:20

Благодарю за ответ! Вы поняли все правильно, а по поводу XPath путей то уточняю что желательнее всего конечно построить более относительный путь к елементу а не самый простой от начала документа до самого елемента! Просто я думал что возможно такая штука уже может быть реализована в каких нибуть javascript фреймверках и там уже более продуманный алгоритм построения XPath выражения. Можно конечно использовать и такую функцию но хотелось бы генерировать такое выражение что бы даже если документ был модифицирован то XPath выражение оставалось правильным, например когда у нас по дороге к нашему елементу вставили еще одну таблицу и в итоге внутри XPath выражения у нас это будет уже не table[2] а table[3].

Андрей Параничев 11.03.2009 14:35

endryha,
Я предположу что такого алгоритма не существует в принципе.

Gvozd 11.03.2009 14:58

Цитата:

Сообщение от Андрей Параничев
endryha,
Я предположу что такого алгоритма не существует в принципе.

+1
ИМХО, для всех случаев такой алгоритм организовать правктически невозможно.
единственный способ-делать XPath-ы своей головой.
есть конечно идеи по организации такого алгоритма
но для качественной реализации этого алгоритма нужен во первых какой-нибудь механизм обработки XPath(что в принципе реализовано уже),и очень качествнный программинг.
в общем виде это будет выглядеть примерно так:
пытаемся перебрать все возможные комбинации, минимизирующих элементы привязки.если не удалось найти адекватного выражения(чтобы количество элементов было равно 1), пытаемся увеличть количество элементов привязки.
трудно, долго, но в первом приближении возможно
но вопрос, в том, какое из полученных выражений считать "хорошим".тут уже нужен человеческий анализ
за программу с реализованной второй частью, я бы не против и выложить деньги.но, такая программа практически невозможна
да и первая часть реализуется долго, трудно и ненаверняка.ее можно дорабатывать до бесконечности, получая незначительный выигрыш для дополнительного круга задач на XPath

endryha 11.03.2009 17:00

В принципе я с вами согласен! Спасибо за советы.


Часовой пояс GMT +3, время: 02:31.