четверг, 13 августа 2009 г.

XPathResult документация FireFox

Реализация XPath в Firefox следует общим стандартам DOM и целиком отличается от реализации XPath в IE. Реализация в Firefox позволяет выполнять выражения XPath как в документах XML, так и в документах HTML. В основе реализации находятся два первичных объекта: XPathEvaluator и XPathResult.

Класс XPathEvaluator вычисляет заданное выражение XPath с помощью метода evaluate(), который принимает пять аргументов: строку с выражением XPath, контекстный узел, к которому должно быть применено выражение, интерпретатор пространств имен (функцию, которая будет обрабатывать пространства имен в выражении), тип результата (существует десять различных типов результата) и объект XPathResult, в который будут помещаться результаты выборки (если в этом аргументе передается значение null, будет создан и возвращен новый объект XPathResult).

Прежде чем двинуться дальше, необходимо разобраться с различными типами результата, которые могут возвращаться методом evaluate(). Список их приводится ниже:

XPathResult. ANY_TYPE не какой-то конкретизированный тип, какой угодно тип. Метод возвращает тип, который естественным образом вытекает из вычисления выражения.
XPathResult.ANY_UNORDERED_NODE_TYPE возвращает набор узлов, состоящий из единственного узла, к которому можно обратиться через свойство singleNodeValue. В случае если требуемый узел не будет найден, возвращается значение null. Возвращаемый узел может быть, а может не быть первым узлом в документе, соответствующим заданному критерию отбора.
XPathResult. BOOLEAN_TYPE возвращает логическое значение.
XPathResult. FIRST_ORDERED_NODE_TYPE возвращает набор узлов, состоящий из единственного узла, к которому можно обратиться через свойство singleNodeValue класса XPathResult. Возвращаемый узел обязательно будет первым узлом в документе, соответствующим заданному критерию отбора.
XPathResult. NUMBER_TYPE возвращает числовое значение.
XPathResult. ORDERED_NODE_ITERATOR_TYPE возвращает упорядоченный (в порядке следования в документе) набор узлов, который можно последовательно обойти с помощью метода (итератора) iterateNext (). Этот метод позволяет обратиться к любому узлу в наборе.
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE возвращает упорядоченный (в порядке следования в документе) статический набор узлов. Модификации узлов, выполняемые в документе, не оказывают влияния на результат.
XPathResult. STRING_TYPE возвращает текстовую строку.
XPathResult.UNORDERED_NODE_ITERATOR_TYPE -возвращает неупорядоченный набор узлов, обойти который можно с помощью уже упоминавшегося метода iterateNext(). Однако порядок следования узлов в наборе может совпадать, а может не совпадать с порядком следования узлов в документе.
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE возвращает неупорядоченный статический набор узлов. Модификации узлов, выполняемые в документе, не оказывают влияния на результат.
Чаще всего используется тип XPathResult. ORDERED_NODE_ITERATOR_TYPE:

var oEvaluator = new XPathEvaluatorO;
var sXPath = "book/author";
var oResult = oEvaluator.evaluateCsXPath.oXmlDorc.documentElement,null, XPathResult.OROERED_NODE_ITERATOR_TYPE, null);
var aNodes = new Array;
if (oResult != null) { var oElement;
while (oElement = oResult. iterateNextO) { aNodes.push(oElement);
}

Этот фрагмент кода создает и вычисляет выражение XPath book/author в контексте корневого элемента документа. Поскольку запрошен результат типа ORDERED_NODE_ITERATOR_TYPE, в качестве результата возвращается набор узлов, обойти который можно посредством метода iterateNextO. По своему действию метод iterateNextO напоминает свойство nextSibling узла DOM в том смысле, что он выбирает следующий узел из результирующего набора и возвращает значение null по достижении конца набора. Эта функция может быть использована в цикле while, как в предыдущем примере, где цикл продолжает работу до тех пор, пока в oElement не появится пустая ссылка, и добавляет очередной узел в массив aNodes с помощью метода push О. Заполненный массив может использоваться, как в IE, что позволяет получать доступ к элементам массива в цикле for.

Мой Пример:

s='/html/body/div/div[3]/div[2]/div/div/div[4]/div/div['+i.toString()+']/table/tbody/tr/td[2]/div/dl/dd/div/a';
headings = document.evaluate(s, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE , null);
//возвращает колличество полученных элементов.
alert(headings.snapshotLength.toString());
//возвращает ссылку [a.href]
userhref=headings.snapshotItem(0).toString();
//возвращает контент snapshotItem(0) -го элемента из возвращенных.
alert(headings.snapshotItem(0).textContent);

//Колличество ссылок в документе:

var linkCount = document.evaluate('count(//a[@href])',
document, null, XPathResult.NUMBER_TYPE, null
).getNumberValue();

1 комментарий:

  1. Этот комментарий был удален администратором блога.

    ОтветитьУдалить