Вы находитесь на странице: 1из 12

1. XPath.

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

2. El modelo de datos de XPath


2.1. Construccin del rbol de Nodos
UndocumentoXMLesprocesadoporunanalizador(oparser)construyendounrboldenodos.Esterbolcomienza conunelementoraz,quesediversificaalolargodeloselementosquecuelgandelyacabaennodoshoja,que contienenslotexto,comentarios,intruccionesdeprocesooinclusoqueestnvacosyslotienenatributos LaformaenqueXPathseleccionapartesdeldocumentoXMLsebasaprecisamenteenlarepresentacinarbreaquese generadeldocumento.Dehecho,los"operadores"dequeconstaestelenguajenosrecordarnlaterminologaquese utilizaalahoradehablarderboleseninformtica:raz,hijo,ancestro,descendiente,etc... Uncasoespecialdenodosonlosnodosatributo.Unnodopuedetenertantosatributoscomodesee,yparacadaunose crearunnodoatributo.Noobstante,dichosnodosatributoNOseconsiderancomohijossuyos,sinomsbiencomo etiquetasaadidasalnodoelemento. AcontinuacinsemuestraunejemplodecmoseconvierteenrbolundocumentoXML.Estemismoejemploser usadoalolargodetodoeltutorial.EnprimerlugarsemuestraeldocumentoXMLyacontinuacinelrbolquegenera. 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="http://www.enlace.es">mariposa</enlace> 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="http://www.abejilla.es">abejilla</enlace> 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="http://www.pajarillo.es">abejilla</enlace> 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/.Nosedebeconfundirelnodorazconelelementorazdeldocumento.As,sieldocumentoXML denuestroejemplotieneporelementorazalibro,steserelprimernodoquecuelguedelnodorazdelrbol,el cuales:/. Insisto: / hacereferenciaalnodorazdelrbol,peronoalelementorazdeldocumento XML,pormsqueun documentoXMLslopuedatenerunelementoraz.Dehecho,podemosafirmarqueelnodorazdelrbolcontieneal elementorazdeldocumento. Nodo Elemento CualquierelementodeundocumentoXMLseconvierteenunnodoelementodentrodelrbol.Cadaelementotienesu nodopadre.Elnodopadredecualquierelementoes,asuvez,unelemento,exceptoelelementoraz,cuyopadreesel nodoraz.Losnodoselementotienenasuvezhijos,queson:nodoselemento,nodostexto,nodoscomentarioynodos deintruccionesdeproceso.Losnodoselementotambintienenpropiedadestalescomosunombre,susatributose informacinsobrelos"espaciosdenombre"quetieneactivos. CualquierelementodeundocumentoXMLseconvierteenunnodoelementodentrodelrbol.Cadaelementotienesu nodopadre.Elnodopadredecualquierelementoes,asuvez,unelemento,exceptoelelementoraz,cuyopadreesel nodoraz.Losnodoselementotienenasuvezhijos,queson:nodoselemento,nodostexto,nodoscomentarioynodos deintruccionesdeproceso.Losnodoselementotambintienenpropiedadestalescomosunombre,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 Portextovamosahacerrefreneciaatodosloscaracteresdeldocumentoquenoestmarcadosconalgunaetiqueta.Un nodotextonotienehijos,esdecir,losdistintoscaracteresqueloformannoseconsideranhijossuyos. Nodo Atributo Comoyahemosindicado,losnodoatributonosontantohijosdelnodoelementoqueloscontienecomoetiquetas aadidasadichonodoelemento.Cadanodoatributoconstadeunnombre,unvalor(queessiempreunacadena)yun posible"espaciodenombres". AquellosatributosquetienenporvalorelvalorpordefectoasignadoenelDTDsetratarncomosielvalorsele hubieseasignadoalescribireldocumentoXML.Alcontrario,nosecreanodoparaatributosnoespecificadosenel documentoXML,yconlapropiedad #IMPLIED definida ensuDTD.Tampocosecreannodosatributoparalas deficionesdelosespaciosdenombre.TodoestoesnormalsitenemosencuentaquenoesnecesariotenerunDTDpara 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 instruccionesdeproceso.Alcontenidodeestosnodossepuedeaccederconlapropiedadstring-value.

3. Los Location Paths


3.1. Conceptos bsicos
Expresiones Una"instruccin"enlenguajeXPathsedenominaunaexpresin.Ypongoentrecomillaslode"instruccin"porque XPathesunlenguajedeclarativo,porloquelasintruccionesnosonexactamentecomoestamosacostumbradosaver. Dichasexpresionespuedenincluirciertavariedaddeoperacionessobredistintostiposdeoperanods.Ennuestrocaso nos vamos a ceir a dos tipos de operandos: llamadas a funciones y location paths (algo as como caminos de localizacin). Un locationpath eslamsimportantedelostiposdeexpresionesquesepuedenespecificarennotacinXPath.La sintaxisdeunlocationpathessimliaralausadaalahoradedescribirlosdirectoriosqueformanunaunidaddediscoen UnixoLinux(ysimilaraladelossistemasbasadosenMSDOSyWindows,siexceptuamoslaunidaddediscoC:, A:yquelasbarrasusadasson/envezdelastpicas\deestosltimossistemasoperativos). Sinembargo,slolasintaxiseslosimilar alsistemadearchivos.Elsignificadodelasexpresionesestotalmente 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 devuelveunalistadeapuntadoresaloselementosqueencajanenelpatrn.Dichalistapuedeestarvacaoconteneruno omsnodos. Nodo contexto Un locationpath siempretieneunpuntodepartidallamado nodocontexto.Paraentendernosescomoeldirectorio actualsinosreferimosaunsistemadeficheros.As,siestandoenUnix,damosunaordenlsobtendremoslosficheros queexisteneneldirectorioactual,mientrasquesidecimos ls /usr/bin obtendremosellistadodelosficheros existenteseneldirectorio/usr/binconindependenciadeldirectorioenqueestemoscolocadosaldarlaorden. Enloslocationpathocurrelomismo.Amenosqueseindiqueuncaminoexplcito,seentenderqueellocationpath partedelnodoqueencadamomentoseestprocesando. Elconceptode"nodocontexto"esimprescindibleparacomprendercmosellevaacabolaeleccindelosnodosque ajustanconelpatrnindicadoenellocationpath.paraexplicaresto,veamoscmoactuaraunmotordeevaluacinde expresionesXPathalleerlasiguienteexpresinaplicadaaldocumentoXMLquemanejamosdesdeelprincipiodel turtorial: /libro/capitulo/parrafo (Aviso:loquevieneacontinuacinrequieredepausadalectura,descansitoparairalfrigorficoaporalgodebebery pequeomasajeenlosojos...comomnimo) Enprimerlugarcomienzaporleer/,locualledicequedebeseleccionarelnodoraz,independientementedelnodo

contextoqueenesemomentoexista.EnelmomentoenqueelevaluadordeXPathlocalizaelnodoraz,stepasaaser elnodocontextodedichaexpresin. Siguiendoconnuestroejemplo,elanalizadorleeraahoralibro,locualledicequeseleccioneTODOSloselementos quecuelgandelnodocontexto(queatendiendoalprrafoanterioreselnodoraz)quesellamenlibro.Bueno...en estecasosolohayuno...porque(otravez)solopuedehaberunelementoraz. Sigamosavanzandoconnuestroejemplo.Acontinuacinelanalizadorleeracapitulo,locualledicequeseleccione TODOSloselementosquecuelgandelnodocontexto(queatendiendoalprrafoanterioreselnodolibro). Enundiscoseraimposiblequehubieradosdirectoriosconelmismonombrecolgandodeunmismodirectoriopadre. Sinembargo,ennuestrodocumentoXMLpodemosvercomohaydoselementos capitulo colgandodelelemento razlibro.Portanto,enestosmomentoshaydoselementosqueencajanconelpatrn/libro/capitulo. ElanalizadorcontinualeyendolaexpresinXPathquelehemosdadoyllegaaparrafo.Conelloleestamosdiciendo 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...yassucesivamente.Elresultadofinal esunnuevoconjuntodenodos(oparasermsprecisos,conjuntodepunterosanodo)queencajanconelpatrn buscado. Predicados Porlopocoquellevamosvisto,podemospensarqueXPathesungranmecanismoparaseleccionarmuchosnodosala vez,locualesmuytil.Peroqupasasisoloqueremosseleccionarunnodoquecumpleciertascaractersticas?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,hacerestotambinesmuysencillo.Podemosutilizarprogramasatalefecto,muytilescuandodeseamos evaluarexpresionesmuycomplejas,obienusarunahojaXSL. Dehecho,msadelanteestudiaremosunprogramaJavadesarrolladoparaestetutorial,yloutilizaremosparaprobarlos ejemplos. Noobstante,pararealizarlosejemplosyejerciciosessuficientecondisponerdeunnavegadorWebqueseacapazde

mostrardocumentosXMLalosque,asuvez,seaplicaunficheroXSL,estoes,unficheroquerealizatransformaciones enelXMLgenerandounnuevocontenido. Parahacerlofcil,hazlosiguiente: Paso1:Guardaelsiguienteficheroconelnombrelibro.xml.


<?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="http://www.enlace.es">mariposa</enlace> 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="http://www.abejilla.es">abejilla</enlace> 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="http://www.pajarillo.es">abejilla</enlace> que surca el espacio en busca de bichejos para comer... </parrafo> </apendice> </libro>

Comopuedesver,esteficheroXMLincluyeunalneaqueindicaquficheroXSL(elficheroquepermiteevaluar expresionesXPath)vaautilizarseparaseleccionarnodosygenerarlainformacinconlaquerealimentesedesea trabajar.Dichofichero,evalua_xpath.xslesjustoelqueponemosacontinuacin. Paso2:Guardaelsiguienteficheroconelnombreevalua_xpath.xsl(ojoalaextensin:xsl).


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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <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 fichero.Ojo:nosedebequitar/text(),peroesporquenosvaaservirparapodercomprobarvisualmentequeslose hanseleccionadolosnodosquenosinteresaban;insistimos,laexpresinXPathnonecesitaacabarcon/text(),pero laponemosparaquenosotrosveamosmejorelresultadoenelnavegador. Paraversifunciona,cargaenunnavegadordepginaswebmodernoelficherolibro.xmlquehasguardadoypodrs vercmosevisualizanslolosnodosquehayaselegido. Usando Java Comoalternativa,hemosdesarrolladounprogramaJavaquerecibeeldocumentoXMLaprocesar,ypidequeseteclee laexpresin.MediantelasclasesXPathyXPathExpressionpodemosbuscarlaexpresineneldocumentoXML.
importjava.io.*; importjavax.xml.parsers.DocumentBuilderFactory; importjavax.xml.xpath.*; importorg.w3c.dom.Document; importorg.w3c.dom.Element; importorg.xml.sax.InputSource; publicclassDemoXPath{ publicDemoXPath(){} publicstaticvoidmain(String[]args){ if(args.length!=1){ System.out.println("\nUSO:javaDemoXPathdocumento.xml\n"); System.exit(0); } DemoXPathdemoxpath=newDemoXPath(); try{ System.out.print("\nIntroducelaexpresiondebusqueda:"); BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in)); Stringbusqueda=stdin.readLine(); XPathxpath=XpathFactory.newInstance().newXPath(); DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); DocumentXMLDoc=factory.newDocumentBuilder().parse(newInputSource(new FileInputStream(args[0]))); Elementelement=XMLDoc.getDocumentElement(); XPathExpressionexp; exp=xpath.compile(busqueda); System.out.println("=>\n"+(String) exp.evaluate(element,XPathConstants.STRING)+"\n"); }catch(Exceptionex){ System.out.println("Error:"+ex.toString()); } }//delmain }//deladefinicindeclase

3.3. Hachas?Ejes?
Laverdadesquenosabamuybiencomotraducireltrminoaxesquesignificaalgoascomocercenaropodar,aunque tambinhacha.Lovoyatraducirporhachaqueseguroquedespusdeunpardeprrafosseconvierteenalgonormal. Digamosqueun hacha includaenun locationpath realizaunaseleccindenodosdentrodelrbol(omejordicho, dentrodelsubrbolquecuelgadelnodooconjuntodenodoscontexto)deacuerdoconalgnpatrn.Esdecir,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::). SirveparaseleccionarTODOSlosnodosquedescendiendandelconjuntodenodoscontexto.Esdecir,nosololoshijos delosnodoscontexto,sinotambinloshijosdeloshijos,yloshijosdeestos,etc.

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

3.4. Nodos test


Los nodostest sonalgoascomofuncionesquenosvanaayudararestringirunpoquitoloquenosdevuelveuna expresinXPath.Yahemosvistoalgunosdeestosnodostestenlosejemplosanteriores.Peroahoravamosaverloscon msdetenimiento. Enprimerlugarhemosdedistinguirentrelashachasdecontenido(contentaxis)delasquenoloson.Lashachasde 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
Yahemostenidoqueintroducirlospredicadosenprrafosanteriores.Bsicamente,unpredicadopermiterestringirel conjunto de nodos seleccionados por un hacha a aquellos que cumplen cierta condicin. Dicha condicin es una expresinXPathyseexpecificaentrecorchetes. Ejemplo:Seleccionartodosloscapituloquetenganunparrafoquetengaalgnelementoconatributohref: //capitulo[parrafo/*[@href]] Sernmuchaslasocasionesenquedeseemosquelosnodosaseleccionarnocumplanunasinovariascondiciones.En estoscasos,lospredicadossepuedensucederunoaotrohaciendoelefectodelaoperacinAND.Comoenelsiguiente 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 expresinXPathbasndoseenlaposicindelelementodevuelto.Talesfuncionesson: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.

Вам также может понравиться