Uno de mis «vicios» ocultos (como desarrollador) es el uso de XSLT y XPath cada vez que puedo (regexp no le queda a la zaga pero si puedo prefiero transformar a extraer información)
Con esta entrada quiero regalaros un apunte rápido que os permita extraer de cualquier fichero xml aquellos nodo que contengan, en uno de sus atributos determinado fragmento de texto.
//img[contains(@src,'userfile')]/@src
Donde:
- //img permite recuperar cualquier elemento img independientemente de la profundidad a la que se encuentre en el árbol (gracias al //)
- contains(…) función para el manejo de cadenas de texto que nos permite buscar la subcadena ‘userfile’ en el atributo @src
Este fragmento de texto podrá ser utilizado en cualquier expresión XPath para recuperar todos los nodos con la etiqueta img (cuando lo necesité estaba parseando un fichero xhtml) cuyo atributo @src contenga la cadena userfile.
Espero que le sea de utilidad a todos aquellos que hacen turismo por la Red buscando soluciones de programación a los típicos problemas que, tarde o temprano, suelen aparecer.
Sea el siguiente fragmento de xml
<img src="./serverfile/foto1.jpg"> <img src="./userfile/foto2.jpg"> <img src="./serverfile/foto3.jpg"> <img src="./userfile/foto4.jpg">
la expresión propuesta recuperará las entradas que aparecen en las líneas #3 y #5
Conclusión
Expresión XPath para recuperar aquellos nodos que contienen cierta cadena de texto.
Espero que os sea de utilidad (a mi, con la mala cabeza que tengo, y que sólo tengo la oportunidad de usar XPath de vez en cuando, seguro que me gustará «encontrarlo» escrito por aquí ;))
Y tú
- ¿qué opinas de XSLT/XPath?
- ¿eres más de transformadas o expresiones regulares?
- ¿has usado XPath?
- ¿qué es lo más complicado que has hecho con esta tecnología?
- …
!Gracias majete! Llevaba rato peleándome con el contains() 🙂
Me gustaMe gusta
Un placer David, me alegra te sea de utilidad.
Salu2
Me gustaMe gusta
Me fue de gran ayuda. Gracias por compartir conocimiento
Me gustaMe gusta
Gracias a ti por comentar.
Me alegra saber que existen más «locos» como yo que usan XPATH y/o XSLT 👍
Me gustaMe gusta