запуск выражения XPath SVG внутри HTML с JavaScript - PullRequest
2 голосов
/ 25 мая 2011

Я пытаюсь запустить выражение xpath поверх svg, встроенного в html.Я просто не могу понять, как настроить параметры.Я хочу найти элементы, которые имеют произвольный атрибут из заданного пространства имен.Я использую следующее выражение xpath:

var xpathexp = "//*[@*[namespace-uri()='"+this.typo7namespace+"']]";

Я протестировал это выражение, и оно заработало, как и ожидалось.Вот код для поиска набора результатов:

var result = this.svgdocument.contentDocument.evaluate( xpathexp, this.svgdocument.documentElement, null, XPathResult.ANY_TYPE, null );

Может кто-нибудь сказать мне или опубликовать ссылку на учебник, как бороться с namspaces, распознаватели пространства имен ??

Привет ...

1 Ответ

1 голос
/ 25 мая 2011

Вот учебник Mozilla по использованию XPath: https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript

Вот один по написанию пользовательских преобразователей пространства имен: https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver

Я нашел эти интерфейсы довольно неуклюжими, поэтомунаписал слой абстракции, который будет принимать строку xpath и узел контекста и будет возвращать обычный массив js.Он работает внутри браузера и встроен в Java под Mozilla Rhino: https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xpath.js

Все вышеперечисленное должно работать во всех браузерах, кроме IE6-9.

IE6-8 изначально не поддерживает SVG, поэтому это должно быть менее важно для вашего вопроса.Для полноты, однако, вот хорошая статья, описывающая поддержку XPath в более раннем IE8, включая поддержку разрешения пространств имен: http://www.nczonline.net/blog/2009/04/04/xpath-in-javascript-part-3/

Очевидно, IE9 также не включает поддержку XPath в браузере, что более проблематичнотак как он поддерживает SVG изначально.Вероятно, лучшим подходом здесь является использование ActiveX для работы с API MSXML: IE9 selectSingleNode отсутствует в бета-версии, как преодолеть это в JavaScript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...