XPATH rara vez es utilizado por nosotros ahora porque JSON es muy popular ahora. Sin embargo, en la era en que XML era un formato de intercambio de datos, XPath jugó una posición muy importante cuando accedimos al azar las grandes estructuras de documentos XML. Quizás muchas personas no hayan notado que la interfaz especificada por DOM Nivel 3 XPath ha sido implementada por Firefox, Safari, Chrome y Opera. La interfaz central que implementan es XPatheValuator, que contiene algunos métodos que pueden funcionar con expresiones XPath. El método más importante es evaluar (), que puede aceptar cinco parámetros 1.xpath consulta cadena 2. Indique qué nodo la cadena de consulta XPath debe comenzar desde 3. Analizador de espacio de nombres (introducido más adelante) 4. Resultado devuelto Tipo 5. El resultado devuelto debe agregarse a ese objeto (de manera acelerada, porque el resultado se devuelve principalmente a través de la evaluación ()).
Hay principalmente 10 tipos de devolución diferentes. Cada uno representa una constante del objeto xpathResult.
Después de tanta introducción, ¿cómo debemos usar estas API para operar?
La información devuelta por la función Evaluate () depende completamente del tipo de resultado solicitado.
Para ejecutar la consulta XPath, debe usar el objeto XPatheValuator. Puede generar un nuevo objeto o usar el objeto incorporado. Si genera un nuevo objeto, debe inicializar el XpatheValuator.
Var evaluator = new XPatheValuator (); // Obtenga el primer resultado Div Var = evaluator.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); alerta ("El primer ID de div es" + resultado.singlenodeValue.id);En Firefox, Safari, Chrome y Opera, todas las instancias de documentos implementan la interfaz XPatheValuator. De esta manera, si una consulta se ejecuta en una página HTML, podemos usar document.evaluate (). Si el documento XML se obtiene a través de xmlhttprequest u otros mecanismos, el método evaluate () también se puede usar, por ejemplo:
// Get First Div Var resultado = document.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); alerta ("El primer ID de div es" + resultado.singlenodeValue.id);Las siguientes son dos formas de devolver múltiples nodos, primero echemos un vistazo a los ejemplos:
// Obtenga todos los divs - iterator Style var resultado = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_iterator_type, null); if (resultado) {var nodo = result.iterAntext (); while (nodo) {alert (node.id); node = node.iterAdExt (); }} // Obtenga todos los Divs - Snapshot Style Var resultado = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_snapshot_type, null); if (resultado) {for (var i = 0, len = result.snapShotLength; i <len; i ++) {alert (result.snapShotitem (i) .id); }}Espacio de nombres
Si solo usa XPath para consultar en documentos HTML, el parámetro analizador del espacio de nombres en evaluate () es generalmente nulo. Si tiende a usar XPATH para consultar en documentos XML que contienen espacio de nombres, entonces debe aprender a crear y usar el analizador de nombres.
Además del espacio de nombres predeterminado, cada URI del espacio de nombres se asigna a un prefijo especificado. Cada resolución de espacio de nombres se utiliza para mapear el prefijo del espacio de nombres y el URI del espacio de nombres para el motor XPath. Hay dos formas de generar un resolución de espacio de nombres. El primero es el siguiente: crear un método que acepte un prefijo de espacio de nombres como parámetro y luego devuelve la URL correspondiente, como sigue:
function resolver (prefix) {switch (prefix) {case "wrox": return "http://www.wrox.com/"; caso "NCZ": return "http://www.nczonline.net/"; predeterminado: return "http://www.yahoo.com/"; }}El segundo tipo utiliza un nodo que contiene información del espacio de nombres para generar un resolución de espacio de nombres.
<Libros xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> javascript profesional </book> </books>
El elemento <Books> contiene toda la información del espacio de nombres. Puede pasar la referencia a este nodo al método CreateSRESRESOVLER () del objeto XPatheValuator, y luego puede obtener automáticamente un resolución de espacio de nombres.
como:
Var evaluator = new XPatheValuator (); var resolución = evaluator.createnSresolver (xmldoc.documentelement);
Usando cualquiera de los métodos anteriores, es fácil de consultar en un documento XML que contiene el espacio de nombres.
Var evaluator = new XPatheValuator (); var resolución = evaluator.createnSresolver (xmldoc.documentelement); VAR result = evaluator.evaluate ("wrox: book", xmldoc.documentelement, resolución, xpathresult.first_ordered_node_type, null); if (resultado) {alert (resultado.singlenodeValue.firstchild.nodeValue); }Nota: Si ejecuta una consulta en un documento XML que contiene un espacio de nombres y no proporciona un analizador de espacio de nombres, se producirá un error.
Soporte para XPath en IE Browser
IE8 aún no ha implementado la interfaz definida en DOM Nivel 3 XPATH, pero también tiene cierto soporte para XPATH. La función XPATH en IE está disponible principalmente para documentos XML y no está disponible para objetos de documentos.
Cómo generar documentos XML en IE:
function createOcument () {if (typeof arguments.callee.activexString! = "string") {var versions = ["msxml2.domDocument.6.0", "msxml2.domDocument.3.0", "msxml2.domDocument"]; for (var i = 0, len = versions.length; i <len; i ++) {try {var xmldom = new ActiveXObject (versiones [i]); argumentos.callee.activexstring = versiones [i]; return xmldom; } catch (ex) {// skip}}} return New ActiveXObject (arguments.callee.activexString); }Después de generar el objeto de documento, puede usar el método Loadxml () para cargar el contenido:
var xmlDoc = createCument (); xmldoc.loadxml ("");El segundo método genera un objeto XML a través del objeto XMLHTTruCest.
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);El tercer método es usar la etiqueta <xml>. Microsoft llama a este método XML Data Island, como sigue:
<xml id = "myxml" src = "data.xml"> </xml>
Entonces:
var xmldoc = document.getElementById ("myxml"). xmlDocument;Soporte de XPath:
Hay dos métodos incorporados para soportar XPATH en objetos de documentos XML en IE:
selectsingLenode () y selectNodes (), cada método acepta una expresión de XPath como parámetro y luego vuelve a colocar el primer nodo coincidente y todos los nodos coincidentes respectivamente.
Soporte del espacio de nombres:
para
<books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> javascript profesional </book>
</books> Para este documento XML, debemos usar el siguiente método para consultar, es decir, primero usar setProperty () para establecer el espacio de nombres del documento XML.
xmldoc.setProperty ("SelectionNamesPaces", "xmlns: wrox = 'http: //www.wrox.com/' xmlns = 'http: //wwww.amazon.com/'"); var book = xmldoc.documentement.selectsinglenode ("wrox: book");