В определении метода evaluate() вы могли заметить указание на интер¬претатор пространства имен. Интерпретатор пространства имен {namespace resolver) - это функция, которая разрешает префиксы про¬странства имен, появляющиеся в выражениях XPath, в универсаль-! идентификаторы ресурсов (URI). Функция интерпретатора может любое имя; к ней предъявляется единственное требование: она должна принимать строковый аргумент (в котором передается прове¬ряемый префикс).Интерпретатор получает префикс в виде входного аргумента и до вернуть соответствующий ему универсальный идентификатор р пространства имен (namespaceURI). Чтобы использовать те же з ния, что были даны в примере для IE, можно написать следую функцию-интерпретатор:
function nsResolver(sPrefix) { switch (sPrefix) { case "na":
return "http://site1.com"; break; case "pub":
return "http://site2.com"; break;
default: .
return null; break;
Благодаря этой функции можно использовать следующее выраж XPath при работе с измененным документом books.xml из при с пространствами имен в IE:
J;?var/sX%thv^
var oEvaluator = new XPathEvaluator();
var oResult = oEvaluator.evaluate(sXPath,oXmlDom.documentElement,nsResoi XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var aNodes = new Array;
if (oResult != null) { var oElement;
while (oElement = oResult.iterateNextO) { aNodes.push(oElement);
>
}
Этот пример напоминает рассмотренное выше вычисление выражева]
XPath. Новое здесь лишь то, что в метод evaluateO передается укая
тель на функцию nsResolve г (), которая была написана нами чуть выя!
Эта функция обрабатывает пространства имен в выражении XPath. Qj
тальная часть программного кода вам знакома. Результирующий Notl
List преобразуется в массив с помощью метода iterateNextO клав
XPathResult, чтобы впоследствии было проще проанализировать поя
ченные результаты. ]
Как видите, реализация XPath в Firefox полностью отличается от щ хода, реализованного в Microsoft. Поэтому для облегчения работы с щ ражениями XPath целесообразно взять библиотеку, учитывающее различия между броузерами.