個人檔案Gustavo Bonansea部落格清單 工具 說明
1 July

Tutorial de XPath 2.0 - Parte 2

TUTORIAL DE XPATH 2.0  -  Parte 2

 

7.
   
Expresiones de ruta (Path)

Una expresión de ruta (path expression) sirve para localizar nodos dentro de la estructura jerárquica propia de Xml. Cada expresión de ruta consta de varios pasos, cada cual se separa por un símbolo “/” o “//”. El primero indica que el siguiente paso se encuentra adyacente en la jerarquía de nodos, es decir que referencia a un hijo, y el segundo puede localizar cualquier nodo que sea descendiente sin importar el nivel (es una abreviatura de: descendant-or-self::node()).          

Las rutas pueden ser absolutas o relativas. Si comienzan con el símbolo “/” son absolutas y hacen referencia al nodo raíz. En caso contrario hacen referencia al nodo actual.

 

Sintaxis

ruta

paso1/paso2/paso3/…/…

7.1             Pasos

Cada paso en una ruta puede tener un eje, un filtro y cero o más predicados y se evalúa con respecto al conjunto de nodos producidos por el paso anterior.

 

Sintaxis

paso

eje::filtro[predicado1][predicado2][…]

 

 

Imagen 1: Expresión que devuelve los títulos de los libros que se encuentran después de “El Zorro”

7.2             Ejes

El eje de un paso especifica la dirección que la que se va a evaluar, es decir si nos vamos a mover hacia arriba en la jerarquía o hacia abajo, si se va a incluir el nodo actual o no, etc. En la tabla 2 se muestran todos los ejes posibles.

 

Ejes

Dirección

Nombre

Alcance

Hacia adelante

child

Hijos del nodo actual

descendant

Todos los descendientes del nodo actual, sin importar el grado, es decir que incluye los nodos hijos de los hijos, etc.

attribute

Incluye solamente a los atributos

self

Nodo actual

descendant-or-self

Descendientes del nodo o el nodo mismo

following-sibling

Nodos que son hijos del nodo padre y siguientes en orden del actual

following

Todos los nodos descendientes del raíz que se encuentran después de la posición del nodo actual y no son descendientes del mismo

namespace

Solo existe por compatibilidad para XPath 1.0 y contiene los nodos de namespace del nodo

Hacia atrás

parent

Padre del nodo

ancestor

Todos los ancestros del nodo, el padre, el padre del padre, etc.

preceding-sibling

Nodos que son hijos del nodo padre y que se encuentran anteriores al nodo actual

preceding

Todos los nodos descendientes del raíz que se encuentran antes de la posición del nodo actual y no son ancestros del mismo

ancestor-or-self

Ancestros del nodo o el nodo mismo

Tabla 2.

7.3             Filtros (Node test)

Los filtros son utilizados para incluir o excluir nodos dentro de un eje, ya sea por nombre o por tipo. El resultado son todos los nodos que cumplen con el filtro especificado. En el caso de filtros por nombre se utiliza un QName. En la tabla 3 se muestran algunos tipos de filtros.

 

 

Sintaxis

QName

prefijo:nombrelocal

 

 

Filtros

Nombre

Filtra

node()

Todos los nodos

text()

Todos los nodos del tipo text

comment()

Todos los nodos del tipo comment

element()

Todos los elementos (nodos del tipo element)

element(Libro)

Todos los elementos de nombre Libro

attribute()

Todos los atributos

attribute(ISBN)

Todos los atributos de nombre ISBN

processing-instruction

Todos los nodos del tipo processing-instruction

QName

Todos los nodos con ese nombre

*

Todos los nodos excepto los del tipo text, comment, y processing-instruction

Tabla 3.

 

preceding::Libro

Ejemplo 12: Expresión que devuelve todos los nodos que son hijos del raíz, no son hijos del nodo actual, preceden en orden al nodo actual y se llaman “Libro”

 

7.4             Predicados

Los predicados son expresiones que permiten filtrar un conjunto de nodos utilizando un criterio determinado. Filtran los nodos que se obtienen como resultado de la expresión de ruta (path expression) que se ejecutó hasta el momento, dejando solo aquellos para los cuales se cumple el criterio. Los predicados se escriben entre corchetes. Si el predicado consta de una expresión que se evalúa como entero entonces como resultado se obtiene el nodo que se encuentra en esa posición (es análogo a los índices de un Array, con la diferencia de que los índices comienzan en 1).

 

Libros/Libro[1]/Titulo

Ejemplo 13: Obtiene el título del primer libro

Libros/Libro[count(../*)]/Titulo

Ejemplo 14: Obtiene el título del último elemento. Nótese que “count(../*)” no es un literal como la expresión del ejemplo 13, sino una expresión que tiene por resultado un entero, en este caso la cantidad de Libros

Libros/Libro/following::Libro[3]/Titulo

Ejemplo 15: Obtiene los títulos de los libros que se encuentran después del tercero

 

En cualquier otro caso (es decir cuando el resultado de la expresión del predicado no es un entero) el resultado de aplicar el predicado es el conjunto de nodos para los cuales la expresión resulta verdadera.

 

Libros/Libro[Autores/Autor/Nombre='Isabel']/Titulo

Ejemplo 16: Título de los libros escritos por un autor de nombre “Isabel”

 

Libros/Libro[count(Autores/Autor)=1][Publicacion>2004]

Ejemplo 17: Expresión que obtiene los libros que fueron escritos por un solo autor y fueron publicados después del 2004

 

7.5             Notación abreviada

Existen formas abreviadas para escribir algunas expresiones de forma más reducida. Por ejemplo, en vez de utilizar el eje attribute se puede utilizar el símbolo @ como en el ejemplo 18. En la tabla 4 podemos observar una lista de todas la abreviaturas.

 

Libros/Libro/attribute::ISBN

Libros/Libro/@ISBN

Ejemplo 18: Cualquiera de las anteriores expresiones tienen por resultado un listado de todos los ISBN de los libros.

 

Abreviaturas

Forma normal

Forma abreviada

child::

ninguna, siempre que se omita el eje se sobreentiende que se referencia a los hijos del nodo actual

attribute::

@

self:node()

.

parent::node()

..

/descendant-or-self::node()

//

[position() = numero]

[numero]

Tabla 4.

GB

回應

請稍候...
很抱歉,您輸入的回應過長。請縮短您的回應。
您尚未輸入內容,請再試一次。
很抱歉,目前無法新增您的回應,請稍後再試。
若要新增回應,您的父母必須先給您權限。要求權限
您的家長已關閉回應功能。
很抱歉,目前無法刪除您的回應,請稍後再試。
您已超過每日回應上限次數,請於 24 小時後再試一次。
由於系統顯示您可能傳送垃圾郵件給其他使用者,因此您帳號中的回應功能已遭停用。 如果您認為自己帳號遭錯誤停用,請連絡 Windows Live 支援
請完成下列安全檢查,以完成回應。
您輸入的安全檢查字元必須與圖片或音訊中的字元相符。

若要新增回應,請以您的 Windows Live ID 登入 (若您使用 Hotmail、Messenger 或 Xbox LIVE,則您已擁有 Windows Live ID)。登入


沒有 Windows Live ID?註冊

引用通告

此內容的引用通告是:
http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!200.trak
引述這則內容的部落格