XPath редко используется нами сейчас, потому что JSON сейчас очень популярен. Однако в эпоху, когда XML был форматом обмена данными, XPath сыграл очень важную позицию, когда мы случайным образом получали доступ к крупным структурам документов XML. Возможно, многие люди не заметили, что интерфейс, указанный на уровне DOM 3, был реализован Firefox, Safari, Chrome и Opera. Основным интерфейсом, который они реализуют, является Xpathevaluator, который содержит некоторые методы, которые могут работать с выражениями XPath. Наиболее важным методом является оценка (), который может принять пять параметров 1.xpath Запрос строки 2. Укажите, какой узел строка запроса XPath должен начинаться с 3. Пространство пространства имен (введено позже) 4. Возвращенный результат Тип 5. Возвращенный результат должен быть добавлен к этому объекту (редко используется, потому что результат в основном возвращается через evaluate ()).
Есть в основном 10 различных типов возврата. Каждый представляет собой константу объекта xpathresult.
После такого большого введения, как мы должны использовать эти API для работы?
Информация, возвращаемая функцией evaluate (), полностью зависит от запрошенного типа результата.
Чтобы выполнить запрос XPath, вам необходимо использовать объект xpathevaluator. Вы можете генерировать новый объект или использовать встроенный объект. Если вы генерируете новый объект, вам необходимо инициализировать Xpathevaluator.
var evaluator = new xpathevaluator (); // Получить первый div var result = evaluator.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); Alert ("First Div Id" + result.singlenodevalue.id);В Firefox, Safari, Chrome и Opera все экземпляры документов реализуют интерфейс Xpathevaluator. Таким образом, если запрос выполняется на HTML -странице, мы можем использовать Document.Evaluate (). Если документ XML получен через Xmlhttprequest или другие механизмы, метод evaluate () также может быть использован, например:
// Получить первый div var result = document.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); Alert ("First Div Id" + result.singlenodevalue.id);Ниже приведены два способа вернуть несколько узлов, давайте сначала посмотрим на примеры:
// Получить все divs - it var result var var = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_iterator_type, null); if (result) {var node = result.iteratenext (); while (node) {alert (node.id); node = node.iteratenext (); }} // Получить All Divs - Style Snapshot var result = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_snapshot_type, null); if (result) {for (var i = 0, len = result.snapshotlength; i <len; i ++) {alert (result.snapshotitem (i) .id); }}Пространство имен
Если вы просто используете xPath для запроса в документах HTML, параметр анализатора пространства имен в evaluate (), как правило, нулевой. Если вы склонны использовать XPath для запроса в документах XML, содержащих пространство имен, вам следует узнать, как создавать и использовать анализатор пространства имен.
В дополнение к пространству имен по умолчанию, каждый URI пространства имен сопоставлен с указанным префиксом. Каждый резольвер пространства имен используется для картирования префикса пространства имен и URI пространства имен для двигателя XPath. Есть два способа генерирования разрешения пространства имен. Первое заключается в следующем: Создайте метод, который принимает префикс пространства имен в качестве параметра, а затем возвращает соответствующий URL, следующим образом:
Function Resolver (prefix) {switch (prefix) {case "wrox": return "http://www.wrox.com/"; case "ncz": return "http://www.nczonline.net/"; по умолчанию: вернуть "http://www.yahoo.com/"; }}Второй тип использует узел, содержащий информацию о пространстве имен для генерации разрешения пространства имен.
<Books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> Professional Javascript </book> </books>
Элемент <книги> содержит всю информацию о пространстве имен. Вы можете передать ссылку на этот узел методу CreatenSresovler () объекта xPathevaluator, а затем вы можете автоматически получить разрешение пространства имен.
нравиться:
var evaluator = new xpathevaluator (); var resolver = evaluator.createnSresolver (xmldoc.documentelement);
Используя любой из вышеперечисленных методов, легко запросить в документе XML, содержащем пространство имен.
var evaluator = new xpathevaluator (); var resolver = evaluator.createnSresolver (xmldoc.documentelement); var result = evaluator.evaluate ("wrox: book", xmldoc.documentelement, resolver, xpathresult.first_ordered_node_type, null); if (result) {alert (result.singlenodevalue.firstchild.nodevalue); }Примечание. Если вы выполняете запрос в документе XML, содержащем пространство имен, и не предоставите анализатор пространства имен, возникнет ошибка.
Поддержка XPath в браузере IE
IE8 еще не реализовал интерфейс, определенный в DOM -уровне 3 XPath, но также обладает определенной поддержкой XPath. Функция XPath в IE в основном доступна для документов XML и недоступна для объектов документа.
Как генерировать XML -документы в IE:
function CeneleCument () {if (typeOf arguments.callee.activexstring! = "String") {var versions = ["msxml2.domdocument.6.0", "msxml2.domdocument.3.0", "msxml2.domdocument"]; for (var i = 0, len = version.length; i <len; i ++) {try {var xmldom = new activexObject (версии [i]); Arguments.callee.activexstring = версии [i]; вернуть Xmldom; } catch (ex) {// skip}}} вернуть new activexObject (arguments.callee.activexstring); }После генерации объекта документа вы можете использовать метод loadxml () для загрузки контента:
var xmldoc = cenestionocument (); xmldoc.loadxml ("" ");Второй метод генерирует объект XML через объект XmlhttRequest.
var xhr = new xmlhttprequest (), xmldoc; xhr.open ("get", "data.xml", true); xhr.onreadystatechange = function () {if (xhr.readystate == 4) {if (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.responsexml; }}; xhr.send (null);Третий метод состоит в том, чтобы использовать тег <xml>. Microsoft вызывает этот метод xml Data Island, следующим образом:
<xml id = "myxml" src = "data.xml"> </xml>
Затем:
var xmldoc = document.getElementbyId ("myxml"). Xmldocument;Поддержка XPath:
Есть два встроенных метода для поддержки XPath в объектах документа XML в IE:
SELECTSINGLENODE () и SELECTNODES (), каждый метод принимает выражение XPATH в качестве параметра, а затем помещает первый соответствующий узел и все соответствующие узлы.
Поддержка пространства имен:
для
<книги xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> Профессиональный javascript </book>
</books> Для этого XML -документа мы должны использовать следующий метод для запроса, то есть сначала использовать setProperty () для установки пространства имен документа XML.
xmldoc.setproperty ("selectionNamespaces", "xmlns: wrox = 'http: //www.wrox.com/' xmlns = 'http: //www.amazon.com/'"); var book = xmldoc.documentelementement.selectsinglenode ("wrox: wrox: wrox:");