0% encontró este documento útil (0 votos)
37 vistas12 páginas

Introducción a XPath y su uso

XPath es un lenguaje que permite seleccionar partes de un documento XML. Al procesar un documento XML, se construye un árbol de nodos que representa la estructura del documento. XPath utiliza esta representación en forma de árbol para seleccionar elementos, atributos y texto mediante la especificación de "caminos de localización" o location paths que navegan por la jerarquía de nodos del árbol.

Cargado por

Pepe Martin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas12 páginas

Introducción a XPath y su uso

XPath es un lenguaje que permite seleccionar partes de un documento XML. Al procesar un documento XML, se construye un árbol de nodos que representa la estructura del documento. XPath utiliza esta representación en forma de árbol para seleccionar elementos, atributos y texto mediante la especificación de "caminos de localización" o location paths que navegan por la jerarquía de nodos del árbol.

Cargado por

Pepe Martin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1. XPath.

Introduccin
1.1 Qu es y para qu sirve
TodoelprocesamientorealizadoconunficheroXMLestbasadoenlaposibilidaddedireccionaroaccederacadauna delaspartesquelocomponen,demodoquepodamostratarcadaunodeloselementosdeformadiferenciada. EltratamientodelficheroXMLcomienzaporlalocalizacindelmismoalolargodelconjuntodedocumentos [Link],seutilizanlosURI(UnifomResource Identifiers),deloscualeslosURL(UnifomResourceLocators)sonsindudalosmsconocidos. UnavezlocalizadoeldocumentoXML,laformadeseleccionarinformacindentrodelesmedianteelusodeXPath, [Link] referenciaatexto,elementos,atributosycualquierotrainformacincontenidadentrodeunficheroXML. XPathensesunlenguajesofisticadoycomplejo,perodistintodeloslenguajesproceduralesquesolemosusar(C, C++,Basic,Java...).Adems,comocasitodoenelmundodeXML,anestenestadodedesarrollo,porloquenoes fcilencontrarherramientasqueincorporentodassusfuncionalidades. XPathesasuvezlabasesobrelaquesehanespecificadonuevasherramientasqueaprovecharparaeltratamientode [Link],XLinkyXQL(ellenguajequemanejalosdocumentosXML comosideunabasededatossetratase),quetambinestnenestadodedesarrollo,peroquesindudacambiarnel [Link],XPathsirveparadecircmodebeprocesaruna hojadeestiloelcontenidodeunapginaXML,perotambinparapoderponerenlacesocargarenunnavegadorzonas determinadasdeunapginaXML,envezdetodalapgina.

2. El modelo de datos de XPath


2.1. Construccin del rbol de Nodos
UndocumentoXMLesprocesadoporunanalizador(oparser)[Link] conunelementoraz,quesediversificaalolargodeloselementosquecuelgandelyacabaennodoshoja,que contienenslotexto,comentarios,intruccionesdeprocesooinclusoqueestnvacosyslotienenatributos LaformaenqueXPathseleccionapartesdeldocumentoXMLsebasaprecisamenteenlarepresentacinarbreaquese [Link],los"operadores"dequeconstaestelenguajenosrecordarnlaterminologaquese utilizaalahoradehablarderboleseninformtica:raz,hijo,ancestro,descendiente,etc... [Link],yparacadaunose [Link],dichosnodosatributoNOseconsiderancomohijossuyos,sinomsbiencomo etiquetasaadidasalnodoelemento. [Link] [Link]. PginaXML:
<libro> <titulo>Dos por tres calles</titulo> <autor>Josefa Santos</autor> <capitulo num="1"> La primera calle <parrafo> Era una sombria noche del mes de agosto...

</parrafo> <parrafo destacar="si"> Ella, inocente cual <enlace href="[Link] que surca el cielo en busca de libaciones... </parrafo> </capitulo> <capitulo num="2" public="si"> La segunda calle <parrafo>Era una obscura noche del mes de septiembre...</parrafo> <parrafo> Ella, inocente cual <enlace href="[Link] que surca el viento en busca del nectar de las flores... </parrafo> </capitulo> <apendice num="a" public="si"> La tercera calle <parrafo> Era una densa noche del mes de diciembre... </parrafo> <parrafo> Ella, candida cual <enlace href="[Link] que surca el espacio en busca de bichejos para comer... </parrafo> </apendice> </libro>

rbolgenerado:
/ | +---libro | +---titulo | | | +---(texto)Dos por tres calles | +---autor | | | +---(texto)Josefa Santos | +---capitulo [num=1] | | | +---(texto)La primera calle | | | +---parrafo | | | | | +---(texto)Era una sombra noche ... | +---parrafo | | | +---(texto)Ella, cual inocente mariposa... | +---capitulo [num=2] | +---(texto)La segunda calle | +---parrafo | | | +---(texto)Era una obscura noche ... +---parrafo | +---(texto)Ella, cual inocente abeja...

2.2. Tipos de Nodos


ExistendistintostiposdenodosenunrbolgeneradoapartirdeundocumentoXML,asaber:raz,elemento,atributo, texto, comentario e instruccin de procesamiento (respectivamente; root, elements, attribute, text, comment y processinginstruction). Nodo Raz Seidentificapor/.[Link],sieldocumentoXML denuestroejemplotieneporelementorazalibro,steserelprimernodoquecuelguedelnodorazdelrbol,el cuales:/. Insisto: / hacereferenciaalnodorazdelrbol,peronoalelementorazdeldocumento XML,pormsqueun [Link],podemosafirmarqueelnodorazdelrbolcontieneal elementorazdeldocumento. Nodo Elemento [Link] [Link],asuvez,unelemento,exceptoelelementoraz,cuyopadreesel [Link],queson:nodoselemento,nodostexto,nodoscomentarioynodos [Link],susatributose informacinsobrelos"espaciosdenombre"quetieneactivos. [Link] [Link],asuvez,unelemento,exceptoelelementoraz,cuyopadreesel [Link],queson:nodoselemento,nodostexto,nodoscomentarioynodos [Link],susatributose informacinsobrelos"espaciosdenombre"quetieneactivos. Una propiedad interesante de los nodos elemento es que pueden tener identificadores nicos (para ello deben ir acompaadosdeunDTDqueespecifiquedichoatributoyaseguraquetomavaloresnicos),estopermitereferenciara dichoselementosdeunaformamuchomsdirecta. Nodos Texto [Link] nodotextonotienehijos,esdecir,losdistintoscaracteresqueloformannoseconsideranhijossuyos. Nodo Atributo Comoyahemosindicado,losnodoatributonosontantohijosdelnodoelementoqueloscontienecomoetiquetas [Link],unvalor(queessiempreunacadena)yun posible"espaciodenombres". AquellosatributosquetienenporvalorelvalorpordefectoasignadoenelDTDsetratarncomosielvalorsele [Link],nosecreanodoparaatributosnoespecificadosenel documentoXML,yconlapropiedad #IMPLIED definida [Link] [Link] procesarundocumentoXML. Nodos comentario y de instrucciones de proceso Aparte de los nodos indicados, en el rbol tambin se generan nodos para cada nodo con comentarios y con [Link]-value.

3. Los Location Paths


3.1. Conceptos bsicos
Expresiones Una"instruccin"[Link]"instruccin"porque XPathesunlenguajedeclarativo,porloquelasintruccionesnosonexactamentecomoestamosacostumbradosaver. [Link] nos vamos a ceir a dos tipos de operandos: llamadas a funciones y location paths (algo as como caminos de localizacin). Un locationpath [Link] sintaxisdeunlocationpathessimliaralausadaalahoradedescribirlosdirectoriosqueformanunaunidaddediscoen UnixoLinux(ysimilaraladelossistemasbasadosenMSDOSyWindows,siexceptuamoslaunidaddediscoC:, A:yquelasbarrasusadasson/envezdelastpicas\deestosltimossistemasoperativos). Sinembargo,slolasintaxiseslosimilar [Link] diferente. Porejemplo,elsiguientepathenUnix: /usr/home/pepeillo/docs hacereferenciaaunnicodirectorio:docselcualcuelgadeelconjuntodedirectorios/usr/home/pepeillo. Sinembargo,lasiguienteexpresinenXPath: /libro/capitulo/parrafo hacereferenciaaTODOSloselementosparrafoquecuelguendirectamentedeCUALQUIERelementocapitulo quecuelguedeCUALQUIERelementolibroque,finalmente,cuelguendelnodoraz,/.Bueno,elltimo"TODOS" sobradadoquesolopuedehaberunelementoraz:libro. Hayqueteneren cuenta queunaexpresinen XPathnodevuelvelos elementos quecumplencon elpatrnque representadichaexpresin,sinoquedevuelveuna referencia adichoselementos;esdecir,unaexpresinXPathnos [Link] omsnodos. Nodo contexto Un locationpath siempretieneunpuntodepartidallamado [Link] [Link],siestandoenUnix,damosunaordenlsobtendremoslosficheros queexisteneneldirectorioactual,mientrasquesidecimos ls /usr/bin obtendremosellistadodelosficheros existenteseneldirectorio/usr/binconindependenciadeldirectorioenqueestemoscolocadosaldarlaorden. [Link],seentenderqueellocationpath partedelnodoqueencadamomentoseestprocesando. Elconceptode"nodocontexto"esimprescindibleparacomprendercmosellevaacabolaeleccindelosnodosque [Link],veamoscmoactuaraunmotordeevaluacinde expresionesXPathalleerlasiguienteexpresinaplicadaaldocumentoXMLquemanejamosdesdeelprincipiodel turtorial: /libro/capitulo/parrafo (Aviso:loquevieneacontinuacinrequieredepausadalectura,descansitoparairalfrigorficoaporalgodebebery pequeomasajeenlosojos...comomnimo) Enprimerlugarcomienzaporleer/,locualledicequedebeseleccionarelnodoraz,independientementedelnodo

[Link],stepasaaser elnodocontextodedichaexpresin. Siguiendoconnuestroejemplo,elanalizadorleeraahoralibro,locualledicequeseleccioneTODOSloselementos quecuelgandelnodocontexto(queatendiendoalprrafoanterioreselnodoraz)[Link]...en estecasosolohayuno...porque(otravez)solopuedehaberunelementoraz. [Link],locualledicequeseleccione TODOSloselementosquecuelgandelnodocontexto(queatendiendoalprrafoanterioreselnodolibro). Enundiscoseraimposiblequehubieradosdirectoriosconelmismonombrecolgandodeunmismodirectoriopadre. Sinembargo,ennuestrodocumentoXMLpodemosvercomohaydoselementos capitulo colgandodelelemento [Link],enestosmomentoshaydoselementosqueencajanconelpatrn/libro/capitulo. [Link] queseleccioneTODOSloselementosparrafoquecuelgandelnodocontexto...peroNOhayunnodocontexto,sino DOS!!Bueno,nopasanada,cadaunodelosnodosdeeseconjuntodenodosvaatenersumomentodegloria,deforma queelevaluadordeexpresioneslovaarecorrerunoporunohaciendoque,mientrasevalaundeterminadonodo,se seaelnodocontextodeesemomento. Enotraspalabras,paralocalizartodosloselementos parrafotalycomodeseamos,seprocesaelprimerelemento capitulo y de l se extraen todos los parrafo que contenga. A continuacin se pasa al prximo elemento capitulodelcualsevuelvenaextraertodoslosdetipoparrafoquetenga...[Link] esunnuevoconjuntodenodos(oparasermsprecisos,conjuntodepunterosanodo)queencajanconelpatrn buscado. Predicados Porlopocoquellevamosvisto,podemospensarqueXPathesungranmecanismoparaseleccionarmuchosnodosala vez,[Link]?oms deunnodoquecumpleconunpatrnperonotodoslosquelocumplen,sinosoloaquellosconunatributoqueles hemosaadidoparasaberquelospuedevertodoelmundo?Bueno,puesparatodoestoseutilizanlospredicados. Lospredicadosseincluyendentrodeunlocationpathutilizandoloscorchetes,comoporejemplo: /libro/capitulo[@num="1"]/parrafo Mediante el anterior locationpath estamos indicando que se escojan todos los elementos parrafo de todos los elementoscapituloquetenganunatributollamadonumalcualselehayaasignadoelvalor"1"(recordemosqueen XMLtodoslosatributostienenvaloresdetipocadena). Atendiendoanuestroejemplo,solohayuncapituloquecumpladichascondiciones,porloquesololoselementos parrafoquelcontienesernseleccionados. Posteriormente,veremosqutipodecosassepuedenponerenunpredicado.

3.2. Cmo hago los eje mplos?


Buenapregunta. GenerarunficheroXMLesmuysencillo,bastauneditordetextocorrienteymoliente;pero,cmopodemos comprobarqueunaexpresinXPathescorrecta?,esdecir,quetrasejecutarsepodamoscomprobarquedichaexpresin seleccionajustolosnodosquedeseamos. Enrealidad,[Link],muytilescuandodeseamos evaluarexpresionesmuycomplejas,obienusarunahojaXSL. Dehecho,msadelanteestudiaremosunprogramaJavadesarrolladoparaestetutorial,yloutilizaremosparaprobarlos ejemplos. Noobstante,pararealizarlosejemplosyejerciciosessuficientecondisponerdeunnavegadorWebqueseacapazde

mostrardocumentosXMLalosque,asuvez,seaplicaunficheroXSL,estoes,unficheroquerealizatransformaciones enelXMLgenerandounnuevocontenido. Parahacerlofcil,hazlosiguiente: Paso1:[Link].


<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="evalua_xpath.xsl"?> <libro> <titulo>Dos por tres calles</titulo> <autor>Josefa Santos</autor> <capitulo num="1"> La primera calle <parrafo> Era una sombra noche del mes de agosto... </parrafo> <parrafo destacar="si"> Ella, inocente cual <enlace href="[Link] que surca el cielo en busca de libaciones... </parrafo> </capitulo> <capitulo num="2" public="si"> La segunda calle <parrafo>Era una obscura noche del mes de septiembre...</parrafo> <parrafo> Ella, inocente cual <enlace href="[Link] que surca el viento en busca del nctar de las flores... </parrafo> </capitulo> <apendice num="a" public="si"> La tercera calle <parrafo> Era una densa noche del mes de diciembre... </parrafo> <parrafo> Ella, cndida cual <enlace href="[Link] que surca el espacio en busca de bichejos para comer... </parrafo> </apendice> </libro>

Comopuedesver,esteficheroXMLincluyeunalneaqueindicaquficheroXSL(elficheroquepermiteevaluar expresionesXPath)vaautilizarseparaseleccionarnodosygenerarlainformacinconlaquerealimentesedesea [Link],evalua_xpath.xslesjustoelqueponemosacontinuacin. Paso2:Guardaelsiguienteficheroconelnombreevalua_xpath.xsl(ojoalaextensin:xsl).


<?xml version="1.0"?> <!-========================================================================== | File..........: evalua_xpath.xsl | Author........: Victor Manuel Rivas Santos, vrivas@[Link] | Description...: XSL for tutorials ========================================================================== -->

<xsl:stylesheet version="1.0" xmlns:xsl="[Link] <xsl:template match="libro"> <HTML> <HEAD> <TITLE>Ejemplos en XPath</TITLE> </HEAD> <BODY> <H1>Resultados:</H1> <PRE> <xsl:apply-templates select="/libro/capitulo/text()"/> </PRE> </BODY> </HTML> </xsl:template> </xsl:stylesheet>

Paso3:ComprobarquetusexpresionesXPathsoncorrectas. Acontinuacin,lonicoquetienesquehaceressustituirloquehemosescritoenrojoenelfichero evalua_xpath.xsl(esdecir,/libro/capitulo)porlaexpresinquequierasevaluaryvolveraguardarel [Link]:nosedebequitar/text(),peroesporquenosvaaservirparapodercomprobarvisualmentequeslose hanseleccionadolosnodosquenosinteresaban;insistimos,laexpresinXPathnonecesitaacabarcon/text(),pero laponemosparaquenosotrosveamosmejorelresultadoenelnavegador. Paraversifunciona,[Link] vercmosevisualizanslolosnodosquehayaselegido. Usando Java Comoalternativa,hemosdesarrolladounprogramaJavaquerecibeeldocumentoXMLaprocesar,ypidequeseteclee [Link].
[Link].*; [Link]; [Link].*; [Link]; [Link]; [Link]; publicclassDemoXPath{ publicDemoXPath(){} publicstaticvoidmain(String[]args){ if([Link]!=1){ [Link]("\nUSO:[Link]\n"); [Link](0); } DemoXPathdemoxpath=newDemoXPath(); try{ [Link]("\nIntroducelaexpresiondebusqueda:"); BufferedReaderstdin=newBufferedReader(newInputStreamReader([Link])); Stringbusqueda=[Link](); XPathxpath=[Link]().newXPath(); DocumentBuilderFactoryfactory=[Link](); DocumentXMLDoc=[Link]().parse(newInputSource(new FileInputStream(args[0]))); Elementelement=[Link](); XPathExpressionexp; exp=[Link](busqueda); [Link]("=>\n"+(String) [Link](element,[Link])+"\n"); }catch(Exceptionex){ [Link]("Error:"+[Link]()); } }//delmain }//deladefinicindeclase

3.3. Hachas?Ejes?
Laverdadesquenosabamuybiencomotraducireltrminoaxesquesignificaalgoascomocercenaropodar,aunque [Link]. Digamosqueun hacha includaenun locationpath realizaunaseleccindenodosdentrodelrbol(omejordicho, dentrodelsubrbolquecuelgadelnodooconjuntodenodoscontexto)[Link],quecada vezquehemosusadolabarra/(salvoparadenominarelnodoraz)estbamosusandounhacha. Veamoslasdistintashachasquepodemosusarpararecorrerelarbolito. Child Es el hacha utilizada por defecto. Se corresponde con la barra, / (aunque tiene una forma ms larga que es: /child::). Ejemplo:Seleccionartodoslostitulodeunlibro: /libro/titulo Ejercicio:Seleccionarelautordellibro. Ejercicio:Seleccionartodoslosprrafosdellibro. Attribute Secorrespondeconelsignodelaarroba,@(oensuformalargaquees:attribute::). Medianteesteoperadorpodemosseleccionaraquellosnodosatributosquedeseemos,indicandoelnombredelatributo encuestin. Ejemplo:Seleccionarelatributonumqueposeanloselementoscapitulo /libro/capitulo/@num
(Paraveresteejemplotendrsquequitar/text()delficheroevalua_xpath.xsl)

Ntese,queparaseleccionarlosnodoselementoquemuestrandichosatributos,loquesehadeusaresunpredicado (comosehaindicadoyaanteriormente)indicandoelnombrequehadeposeerelatributoy,sisedesea,elvalorque debepresentar. Ejemplo:Seleccionartodosloselementoshijodeloscapituloqueposeanelatributopublic(sinimportarel valorasignadoalmismo): /libro/capitulo[@public]/* Ejemplo:Seleccionartodosloselementoshijodeparrafocuyoatributodestacarseaiguala"si". /libro/titulo/parrafo[@destacar="si"] Ejercicio:Seleccionartodosatributosnumdelosapndices. Ejercicio:Seleccionartodoslosatributoshrefdetodoslosprrafosdelfichero. Ejercicio:Seleccionartodoslosprrafosdeloscaptulos(nodelosapndices)queposeanunatributohref Descendant Seespecificaponiendounadoblebarra://(ensuformalarga:descendant::). [Link],nosololoshijos delosnodoscontexto,sinotambinloshijosdeloshijos,yloshijosdeestos,etc.

Ejemplo:Seleccionartodoslosparrafodeunlibro: /libro//parrafo Ejemplo:Seleccionartodoslosdescendientesdeparrafoquetienenunatributohref. //parrafo//*[@href] Ejemplo:Mostrarelvalordelatributohrefdelcasoanterior:. //parrafo//*[@href]/@href Self Seespecificamedianteelpunto(.). [Link],supongamosquedeseamosseleccionartodoslos parrafo descendientes del nodo contexto. No podemos escribir //parrafo, dado que seleccionara todos los [Link],laformacorrectaes:.//parrafo [Link] momentoseverconmsclaridadlagranutilidaddeestehacha. Parent Aligualqueenlossistemasdeficheros,seutilizanlosdospuntosparaidentificarlo:.. Elcomportamientodeestehachaesunpocoextraoalprincipiodadoquerealizaunpasohaciaatrsenelrbolde nodos. Ejemplo:Seleccionartodoslosnodosquetienenalgnhijodetipoparrafo: //parrafo/.. Ejemplo:Seleccionartodoslosnodoscapituloquetienenalgnhijodetipoparrafo: //parrafo/../../capitulo Obien: //capitulo/parrafo/.. Ejercicio:Seleccionartodoslosnodosquetienenunhijodetipoenlace. Ancestor Detodaslashachasquepodemosusar,estaeslanicaquenotieneningunaformadeabreviacin,sinoquehayque ponerlacomoancestor:: [Link],devuelvetodosloselementosdeloscualesel nodocontextoesdescendiente. Ejemplo:Seleccionartodosloselementosquetienenentresusdescendientesalgnparrafo //parrafo/ancestor::*

3.4. Nodos test


Los nodostest sonalgoascomofuncionesquenosvanaayudararestringirunpoquitoloquenosdevuelveuna [Link] msdetenimiento. Enprimerlugarhemosdedistinguirentrelashachasdecontenido(contentaxis)[Link] conteniosonbsicamentetodaslasvistasexceptoattibuteynamespace(escomoattributeperoparaobtener el"espaciodenombres"asociadoalelemento). Nodos test aplicables a TODAS las hachas Elnodotest*devuelvetodoslosnodosdetipoprincipal(esdecir,elemento,atributooespaciodenombres),perono nodosdetexto,comentariosydeinstruccionesdeproceso. Ejemplo:Seleccionartodoslosnodosprincipalesdescendientesdelosparrafo: //parrafo/* Ejercicio:Seleccionartodoslosnodosprincipalesdescendientesdelosapndices: node() Elnodotestnode()devuelvetodoslosnodosdetodoslostipos. Seleccionartodoslosnodosdescendientesdelosparrafo: //parrafo/node() Nodos Test aplicables SOLO a la hachas de contenido text() Selecciona cualquier nodo de tipo texto y es precisamente lo que hemos estado poniendo en el fichero evalua_xpath.xlparavisualizarelcontenidodelosnodosseleccionadosporcadaunadelasexpresionesdelos ejemplosyejercicios. Ejemplo:Seleccionareltextodetodoslosnodosparrafo: //parrafo/text() Ejemplo:SeleccionarTODOeltextoquecuelgadetodoslosnodosparrafo(ojo:vesladiferenciaconel anterior?) //parrafo//text() comment() Permiteseleccionarcualquiernododetipocomentario. processing-instruction() Cualquiernododetipodeinstruccindeproceso,independientementedesudestino. processing-instruction( destino ) Cualquiernododetipodeinstruccindeprocesorelativoaldestinoespecificado.

processing-instruction( cursor ) Cualquiernododetipodeinstruccindeprocesoconeldestinocursor.

3.5. Predicados
[Link],unpredicadopermiterestringirel conjunto de nodos seleccionados por un hacha a aquellos que cumplen cierta condicin. Dicha condicin es una expresinXPathyseexpecificaentrecorchetes. Ejemplo:Seleccionartodosloscapituloquetenganunparrafoquetengaalgnelementoconatributohref: //capitulo[parrafo/*[@href]] [Link] estoscasos,[Link] ejemplo. Ejemplo:Seleccionartodosloscapituloquetenganunparrafoquetengaalgnelementoconatributohref yqueellosmismos(loscapitulo)tenganelatributopublicavalorsi: //capitulo [parrafo/*[@href]] [@public='si'] Aunquetambinsepuedehacerusodeloperadorandencerrandoentreparntesislosdistintospredicadoslogicos. Ejemplosimilaralanterior //capitulo[ (parrafo/*[@href]) and (@public='si')] Tambinsepuedehacerusodelaoperacinor. Esisteotrotipodeoperacionorqueutilizalabarravertical:|separandonodospredicados,sinodosexpresionesXPath. Ejemplo:Seleccionartodosloscapituloquetenganunparrafoquetengaalgnelementoconatributohref otodoslosapendice: //capitulo[parrafo/*[@href]]|//apendice Porltimo,tambinpodemosespecificarconnotlanegacindealgunadelasnegacionesdelpredicado. Seleccionartodosloscapituloquenotenganelatributopublic //capitulo[not(@public)] Predicados con funciones de cardinalidad Existen,porltimo, ciertasfuncionesquenos vana servir pararestringir elconjunto de nodos devueltos enuna [Link]:position(),last()eid(). position() Seleccionarelsegundocapitulo: //capitulo[position()=2] Estafuncinsepuedesimularponiendosimplementeelnmeroentrecorchetes. Mismoejemploanterior:seleccionarelsegundocapitulo:

//capitulo[2] last() Seleccionarelltimocapitulo: //capitulo[last()] Seleccionartodosloscapitulomenoselltimo: //capitulo[not(position()=last())] Estasfuncionessepuedenusarconexpresionesmatemticas,comoenelsiguienteejemplo. Seleccionarelpenltimocapitulo: //capitulo[last()-1] id() Seleccionarlosparrafohijosdelelementoconid="capitulo_1": id( "capitulo_1" )/parrafo Hayquetenerencuentaundetalle:slosepodrusarenaquellosficherosXMLqueseanvalidadosporunDTDenel queseespecifiquequeelatributoidesnico.

4. Apndice
4.1. Ejercicios
HemoscreadounadireccinwebenlaquepuedeshacerejerciciosdeXPath:ejercicios_xpath.html ElficheroXMLsobreelquetratanlosejercicioses:ejercicios_xpath_xml.html Deberastenerloalavistaparahacerlosejercicios.

También podría gustarte