Tool.Yun
Herramientas practicas para desarrolladores
CSV a datos
Codificador/decodificador de cadenas Base64
Codificador/decodificador de matriz hexadecimal Base64
Consumo y gasto de energía en la computadora
Conversor de caracteres Unicode a entidades Java
Conversor de coordenadas geográficas
Conversor de formato de variables de entorno
Conversor de propiedades
Convertidor dBm mW
Convertidor de archivos Base64
Convertidor de base entera
Convertidor de muchas unidades
Convertidor de números romanos
Convertidor de unidades de almacenamiento de datos
Excel a datos
Generador de ULID
Normalizador de correo electrónico
Texto a Unicode
Texto a binario UTF-8
Torrente a Magnet
Analizador JWT
Analizador SAML
Analizador de certificados/claves
Bcrypt
Bytes de Niceware a frase de contraseña
Calculadora de CRC
Cifrado PGP
Cifrado RSA
Cifrado de archivos PGP
Cifrado de cadenas Jasypt
Cifrar/descifrar texto
Codificador/decodificador Bech32
Conversor de certificados SSL
Criptografía AGE
Descifrado de Ansible Vault Crypt
El secreto compartido de Shamir
Firmante y verificador RSA/DSA/ECDSA
Generador JWT
Generador de HMAC
Generador de RSE
Generador de certificados X509
Generador de claves PGP
Generador de pares de claves ECDSA
Generador de pares de claves Ed25519
Generador de pares de claves RSA
Hasher Argon2
Hasher de archivos
Paseto/PASERK Local
Paseto/PASERK Público/Privado
Texto hash
Decodificador de código QR
Generador de códigos QR
Generador de códigos QR de WiFi
Generador de códigos de barras
Generador de información de contacto QR
Lector de código de barras
Validador de GTIN
tools.epc-qrcode-generator.name
Analizador y formateador de teléfonos
Buscador ISO 639
Buscador de códigos de país ISO 3166
Búsqueda Unicode
Calculadora de IMC
Calculadora de SLA
Calculadora de ritmo de carrera
Compatibilidad de licencias de software
Comprobador de tarjetas de crédito
Conversor de RMB a mayúsculas
Conversor de divisas
Convertidor de calendario
Diccionario en línea
Directrices de iluminación del IES
Explicar el comando Shell
Validador de Luhn
Validador de números de IVA
Validador y analizador IBAN
Validador y analizador ISBN
Conversor de cotizaciones
Convertidor de archivos HEX
Convertidor de rizos
Descompresor/desempaquetador de Javascript
Divisor de archivos
Embellecedor de Javascript
Embellecer y formatear SQL
Embellecimiento y minimización de CSS/JS
Escaper de cuerdas
Falsificador de datos
Generador de GitIgnore
Generador de atributos de Gita
Generador de cadenas de conexión a bases de datos
Generador de correo electrónico
Generador de creación de bases de datos
Generador de faviconos
Generador de metagráficos abiertos
Generador de parámetros SQL
Generador de scripts para pruebas de carga K6
Generador de secretos de Django
Generador de tablas de bases de datos
INSERTAR JSON a SQL
Json a Protobuf
Json a Typescript
Minificador de SQL
Ofuscador de Javascript
Probador de Picomatch
Probador de escape ANSI
Probador de interfaz de usuario Swagger
Pruebas de API
Resaltador de código/scripts
Stacktrace más bonito
Temporizador Pomodoro
editor de comandos CLI
Conversor de Docker Compose a Docker Run
Conversor de Docker Run a Docker Compose
Conversor de formato de Docker Compose
Creador de Traefik Docker Compose
Descargador de imágenes de Docker
Docker Compose a Quadlets
Docker Compose a archivo .env
Docker Compose para Kubernetes
Ejecución de Docker en Kubernetes
Ejecución de Docker en Quadlets
Etiquetas de Docker Pangolin
Generador de RBAC para Kubernetes
Generador de etiquetas de Dockerfile
Inspeccionar Docker para ejecutar Docker
Validador de Docker Compose
Alarma de crono/día laborable
Alarma de tiempo
Analizador de archivos ICAL
Calculadora TTL
Calculadora de ETA
Calculadora de duración
Calculadora de días
Calculadora de fechas y duraciones
Conversor de fecha y hora
Conversor de números de semana
Conversor de zona horaria
Cronómetro
Cuenta atrás
Fusión de iCal
Generador ICAL
¿Que día?
Calculadora de amortización
Analizador de URL
Analizador de cookies
Analizador de correo electrónico
Analizador de correo electrónico rebotado
Analizador de informes DMARC
Analizador de mensajes de Outlook
Buscador de propiedades LDAP de ActiveDirectory
Calculadora de resistencias
Codificador/decodificador hexadecimal
Consola de puerto serie
Convertidor GZip/Deflate
Convertidor SMART Raw
Convertidor de ObjectId de MongoDB
Convertidor de codificación MIME
Convertidor de números de punto flotante
Convertidor de orden medio-endian
Decodificador EMV TLV
Decodificador de URL compartidas de SharePoint
Decodificador de transacciones ETH
Descodificador de Outlook Safelink
Detector de tipo de archivo
Detector/decodificador de juegos de caracteres de texto
Enmascarador de datos sensibles
Expansor de URL cortas
Extractor de ID de copos de nieve
Generador de TCPDump
Generador de URL
Generador de comandos de Nmap
Hoja de trucos para el cableado RJ45 Cat6
Información del código clave
Lector de archivos de Parquet
Probador HTTPS
Probador de DNS
Probador de propagación DNS
Probador de píxeles muertos
键盘测试器
Conversor de unidades de volumen
Convertidor de aceleración
Convertidor de caudal volumétrico
Convertidor de energía alimentaria
Convertidor de frecuencia
Convertidor de iluminancia
Convertidor de potencia
Convertidor de prefijos del SI
Convertidor de temperatura
Convertidor de unidades angulares
Convertidor de unidades de energía
Convertidor de unidades de fuerza
Convertidor de unidades de longitud
Convertidor de unidades de masa
Convertidor de unidades de presión
Convertidor de unidades de área
Convertidor de velocidad
Ordenador de fitness
Convertidor UUID
Generador de UUID
Generador de contraseñas
Generador de contraseñas BIP39
Generador de contraseñas de Diceware
Generador de código PIN
Generador de códigos OTP
Generador de nanoIDs
Generador de numerónimos
Generador de tokens
generador de números aleatorios
Hoja de referencia de Docker
Hoja de referencia de Docker Compose
Hoja de referencia de Dockerfile
Hoja de referencia de confirmación semántica de Git
Hoja de referencia de expresiones regulares comunes
Hoja de referencia de selectores CSS
Hoja de referencia de sintaxis XPath
Hoja de referencia de sintaxis de JSONPath
Hoja de trucos de Bash
Hoja de trucos de Docker SWARM
Hoja de trucos de Git
Hoja de trucos de Jq
Hoja de trucos de Markdown
Hoja de trucos de Nano
Hoja de trucos de Nginx
Hoja de trucos de PowerShell
Hoja de trucos de Sed
Hoja de trucos de VIM
Hoja de trucos de comandos de pantalla
Hoja de trucos de expresiones regulares
Hoja de trucos del comando TMUX
Hoja de trucos del comando Zellij
Hoja de trucos del comando chmod
Hoja de trucos para K8
Comparación de imágenes
Conversor de formatos de imagen
Convertidor HEIC
Convertidor ICO/PNG
Eliminar EXIF
Eliminar el fondo de la imagen
GIF a MP4
Grabadora de cámara
Imagen a SVG (potrace)
Inversor de color de imagen
Lector de calidad de imágenes EXIF/Metadatos/GPS/JPEG
Marcador de agua
OCRizar imágenes y PDF
Recortar imagen
Redimensionador de imágenes
Vista previa de SVG
Analizador de tamaño JSON
Aplanador/desplanificador de JSON
CSV a JSON
Consulta JSON
Convertidor de JS a JSON
Convertidor de JSON a JS
Convertidor de JSON a YAML
Convertidor de cadenas JSON
Código JSON a PHP
DDL de JSON a SQL
Diferencia JSON
Editor JSON
Embellecer y formatear JSON
Entidad JSON a Java
Escaper/Unescaper de JSON
Fusión JSON
JSON Linter
JSON a .env
JSON a C#
JSON a CSV
JSON a MessagePack
JSON a TOML
JSON a TS
JSON a XML
JSON a datos
JSON a objeto
JSON para llevar
Json a PHP-Array
Json a Python
Json a esquema
Maestro de clasificación JSON
Minificar JSON
ObjGen a JSON
PHP-Array a JSON
Paquete de mensajes a JSON
Probador de rutas Jq/JSON
tools.json-patch.name
Lanzador de monedas
Rueda de la fortuna
Selector de tarjetas
Tirador de dados
Calculadora binaria
Calculadora de propinas
Conversor de formatos matemáticos
Evaluador de matemáticas
OCR matemático
Visualizador de curvas trigonométricas/de ecuaciones
Calculadora de distancia geográfica
Calculadora de porcentajes
Calculadora de relación de aspecto
Constructor de puntos de referencia
Cifrado de PDF
Compresor de PDF
Comprobador de firmas PDF
Concatenador de PDF
Descifrar y desbloquear PDF
Extractor de páginas PDF
Extractor de texto PDF
HTML a PDF
Linealización de PDF/FastWeb
Generador de expresiones Cron
Analizador de la fortaleza de las contraseñas
Autorización SIP
Búsqueda de dirección MAC
Calculadora Chmod
Calculadora RAID
Calculadora RAID ZPOOL
Calculadora de HDD
Calculadora de confiabilidad RAID
Calculadora de exclusión de subredes IP
Calculadora de rango de CIDR a IPv4/6
Calculadora de rango de IPv4/6 a CIDR(s)
Calculadora de subredes IPv4
Calculadora de subredes IPv6
Calculadora de velocidad de transferencia de datos
Calculadora visual de subredes
Comprobador DNSBL
Comprobador de Whois
Comprobador de puertos TCP/UDP
Consultas DNS
Consultas DNS/RDAP de Cloudflare
Convertidor de Punycode
Convertidor de direcciones IPv4
Convertidor de direcciones IPv6
Convertidor de direcciones MAC
Decodificador ARPA
Decodificador de causa de spam X-VR
Descargador de enlaces múltiples
Desinfectante HAS
Enteros a IPv4/IPv6
Expansor de rango IPv4
Formateador de Nginx
Formateador de comandos de shell
Fuerza de la contraseña de Zxcvbn
Generador Apache LogRotate
Generador FStab
Generador Option43
Generador Rsync
Generador WPA PSK
Generador de DNS BIMI
Generador de DNS DKIM
Generador de DNS DMARC
Generador de DNS PTR
Generador de DNS SPF
Generador de HTAccess
Generador de ULA de IPv6
Generador de autenticación básica
Generador de comandos Curl
Generador de comandos UFW
Generador de comandos de apagado
Generador de configuraciones de Wireguard
Generador de crontab
Generador de htpasswd/htaccess
Generador de iptables
Generador de puertos aleatorios
Hoja de trucos de ZPool
IPv4-6/IPRange/CIDR en IPRange/CIDR/IPMask
Linealizador de comandos de shell
Listador de subredes IPv4
Mi dirección IP
Números de puerto
Probador de micrófonos
Pruebas de WebSocket
Silbido
Ubicación geográfica de IP
generador de direcciones MAC
generador de línea de comandos de firewalld
tools.restic-command-generator.name
tools.url-redirection-checker.name
De Epub a Markdown
Diferencia de Markdown
Editor de Markdown
Embellecedor de tablas de Markdown
Generador de tablas Markdown
Generador de índice de Markdown
HTML a Markdown
Lorem Ipsum de rebajas
Markdown a DOCX
Markdown a HTML
Markdown a datos
Markdown a texto
Pegar como Markdown
Vista previa de Markdown
tools.markdown-format-converter.name
Linter TOML
TOML a JSON
TOML a YAML
Buscador de líneas duplicadas
Calculadora de Levenshtein
Codificador/decodificador de tokens GPT
Comparación de fuentes
Compartidor de enlaces sociales
Comprobador de I y L
Conversor de distribución de teclado
Conversor de mayúsculas y minúsculas
Convertidor de código Morse
Convertidor de listas
Convertidor de runas
Diagrama de estructura de carpetas
Diferencia de texto
Divisor de indicaciones de IA
Estadísticas de texto
Estimador de tokens GPT
Exportador de sirenas
Extraer texto de HTML
Formateador Unicode
Generador de citas
Generador de comandos Sed
Generador de texto artístico ASCII
Generador/Banner de Zalgo
Hola, generador.
Imagen a arte ASCII
JSON a TOON
Lector de RSVP
Listas Comparar
Ofuscador de cadenas
Palabras distintas
Paquete de archivos para IA
Probador de expresiones regulares
Reemplazador de texto inteligente y separador de línea
Selector de emojis
Selector de líneas aleatorias
TOON a JSON
Tabulador a espacios
Texto a nombres Unicode
Texto al alfabeto de la OTAN
Traductor de texto
Unicode a GSM-7
Analizador de agente de usuario
Cadena Slugify
Capturador de URL
Codificar/decodificar cadenas con formato URL
Comprobador de contraste de color
Conversor de colores
Convertidor CSS XPath
Convertidor de píxeles REM
Convertidor de unidades CSS
Creador de fragmentos de búsqueda de texto de URL
Códigos de estado HTTP
Editor HTML WYSIWYG
Embellecedor de CSS
Embellecedor de HTML
Escapar entidades HTML
Generador de URL UTM
Generador de degradados CSS
Generador de marcadores de posición SVG
HTML a XHTML
HTML a datos
Imagen a CSS
Información del dispositivo
Limpiador de HTML
Limpiador de URL
Minificador de HTML
Rueda de colores
Tipos MIME
Formateador XML
Linter XML
ObjGen a HTML
Probador XPath
Probador XSLT
XML a JSON
Aplanador/desaplanador de YAML
Convertidor de YAML a JSON
Embellecer y formatear YAML
Fusión de YAML
YAML a TOML

Hoja de referencia de sintaxis XPath

Hoja de referencia de sintaxis XPath

XPath navigates an XML or HTML document as a tree. Every step has the form axis::node-test[predicate], and most of it has a short form: //div[@class="card"]/a/@href reads “the href of every a inside any div with class card”.

⚠️ Browsers, Selenium and most scrapers implement XPath 1.0. ends-with(), matches(), lower-case() and replace() are 2.0+ and only work in tools like xmllint, Saxon or lxml with an XSLT 2.0 processor. Workarounds for 1.0 are given below.

🧭 Path Syntax

XPathSelects
/From the document root — an absolute path
//Anywhere in the document, at any depth
.The current (context) node
..The parent of the context node
@attrAn attribute
*Any element
@*Any attribute
text()The text nodes of an element
node()Any node at all, text and comments included
[n]The nth match — 1-based, not 0-based
[last()]The last match
a | bThe union of two expressions
/html/body            (: absolute: the body of the page :)
//text()              (: every text node :)
./div/b               (: relative to the context node :)
(//p)[2]              (: the second p in the whole document :)
//p[2]                (: every p that is the second p of its parent :)

🏷 Elements & Attributes

XPathDescriptionCSS
//EEvery <E> elementE
(//E)[2]The second <E> in the document—
//E[@A]<E> carrying attribute AE[A]
//E[@A="t"]<E> where A is exactly tE[A='t']
//E[contains(@A,"t")]<E> where A contains tE[A*='t']
//E[starts-with(@A,"t")]<E> where A starts with tE[A^='t']
//E[substring(@A, string-length(@A)-2)="t"]<E> where A ends with t (1.0 trick)E[A$='t']
//E[ends-with(@A,"t")]The same, XPath 2.0+ onlyE[A$='t']
//E[matches(@A,"r")]A matches regex r (2.0+)—
//E/@AThe value of attribute A—
//*/@AAttribute A of any element—
//E[@A2="t"]/@A1A1 where A2 is t—
//E1[@id="I1"] | //E2[@id="I2"]Either elementE1#I1, E2#I2
//E[@id="I1" or @id="I2"]<E> with either idE#I1, E#I2

🆔 Id, Name, Class & Language

XPathDescriptionCSS
//*[@id="I"]The element with id I#I
//E[@id="I"]<E> with id IE#I
//*[@name="N"]Any element named N[name='N']
//*[@name="N"][@value="v"]Named N with value v[name='N'][value='v']
//*[contains(concat(" ", normalize-space(@class), " "), " C ")]Element with class C — the padding avoids matching C2.C
//E[contains(concat(" ", normalize-space(@class), " "), " C ")]<E> with class CE.C
//E[@lang="L" or starts-with(@lang, concat("L","-"))]<E> in language L or a subcodeE[lang|='L']

📝 Text & Links

XPathDescriptionCSS
//*[.="t"]Element whose whole text is exactly t—
//E[contains(text(),"t")]<E> with a text node containing t—
//E[contains(.,"t")]<E> whose text, descendants included, contains t—
//E[normalize-space()="t"]Exact text, ignoring surrounding whitespace—
//aEvery linka
//a[.="t"]The link labelled exactly t—
//a[@href="url"]The link pointing at urla[href='url']
//a[.="t"]/@hrefThe URL behind the label t—
//a[starts-with(@href,"https")]Secure links onlya[href^='https']

👪 Parents & Children

XPathDescriptionCSS
//E/*[1]First child of <E>E > *:first-child
//E/*[last()]Last child of <E>E > *:last-child
//E[1]Each <E> that is the first of its type in its parentE:first-of-type
//E[last()]Last <E> of its typeE:last-of-type
//E[2]Second <E> of its typeE:nth-of-type(2)
//*[2][name()="E"]Second child, if it is an <E>E:nth-child(2)
//E[last()-1]Second-to-last <E> of its typeE:nth-last-of-type(2)
//E/..The parent of <E>—
//div/form/parent::*Every element that has a form childdiv:has(> form)
//*[@id="I"]//E<E> anywhere under id I#I E
//E[count(*)=0]<E> with no element childrenE:empty
//E[count(*)=1]<E> with exactly one child—
//E[count(preceding-sibling::*)+count(following-sibling::*)=0]<E> that is an only childE:only-child
//E[count(../E)=1]<E> with no <E> siblingsE:only-of-type
//E1[E2 and not(*[not(self::E2)])]<E1> whose only children are <E2>—
//E[position() mod N = M + 1]Every Nth element, offset by ME:nth-child(Nn+M)

👥 Siblings

XPathDescriptionCSS
//E2/following-sibling::E1Every <E1> after a sibling <E2>E2 ~ E1
//E2/following-sibling::*[1][name()="E1"]<E1> immediately after <E2>E2 + E1
//E2/following-sibling::*[2][name()="E1"]<E1> two siblings after <E2>E2 + * + E1
//E/following-sibling::*[1]Whatever follows <E> directlyE + *
//E2/preceding-sibling::E1Every <E1> before a sibling <E2>—
//E2/preceding-sibling::*[1][name()="E1"]<E1> immediately before <E2>—
//E/preceding-sibling::*[1]Whatever precedes <E> directly—

📊 Tables & Form State

XPathDescriptionCSS
//*[@id="T"]//tr[3]//td[2]Third row, second cell#T tr:nth-child(3) td:nth-child(2)
//td[preceding-sibling::td="t"]The cell right after the one reading t—
//td[preceding-sibling::td[contains(.,"t")]]Cells following one containing ttd:has(~ td)
//table[count(tr)=1 and count(tr/td)=2]Tables with one row and two columns—
//table/tr[last()]The last row of a tabletable tr:last-child
//E[@disabled]A disabled controlE:disabled
//E[not(@disabled)]A control that is not disabledE:enabled
//*[@checked]A checked checkbox or radio:checked

🧮 Functions

Strings

FunctionReturns
contains(haystack, needle)True when the first string contains the second
starts-with(haystack, needle)True when it starts with it
concat(s1, s2, …)The strings joined together
normalize-space(s)The string with runs of whitespace collapsed and trimmed
string-length(s)The number of characters
substring(s, start [, length])A slice — 1-based
substring-before(haystack, needle)Everything before the first occurrence
substring-after(haystack, needle)Everything after it
translate(s, from, to)Characters mapped one by one — the 1.0 way to fold case

Numbers, logic & nodes

FunctionReturns
count(node-set)How many nodes matched
sum(node-set)The sum of their numeric values
position()The index of the context node within its step
last()The size of the context — so [last()] is the final node
name([node-set])The qualified name of the first node
namespace-uri([node-set])Its namespace URI
lang(s)True when the node is in that language
not(expr)The negation
true() / false()Boolean constants
boolean(expr) / string(o) / number(o)Type conversions
ceiling(n) / floor(n) / round(n)Rounding

💡 Case-insensitive matching in XPath 1.0: //E[contains(translate(@A,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz"), "t")]

🧭 Axes

AxisShort formSelects
child(default)The direct children of the context node
descendant//Every node below the context node
descendant-or-self//The context node and everything below it
parent..The single parent node
ancestor—Parent, grandparent, up to the root
ancestor-or-self—The same, including the context node
following—Everything after the node in document order, except descendants
following-sibling—Later siblings under the same parent
preceding—Everything before it, except its ancestors
preceding-sibling—Earlier siblings under the same parent
attribute@The attributes of the node
self.The context node itself
//td[.="Total"]/ancestor::table          (: the table a cell belongs to :)
//h2[.="Specs"]/following-sibling::ul[1] (: the list after a heading :)
//input[@name="q"]/ancestor-or-self::form (: the form wrapping a field :)

🧠 Worked Examples

//hr[@class="edge" and position()=1]
(: the first hr of class 'edge' under each parent :)

//table[parent::div[@class="pad"] and not(@id)]//a
(: links in unnamed tables inside a padded div :)

/html/body/div/*[preceding-sibling::h4]
(: whatever comes after an h4 :)

//tr/td[font[@class="head" and text()="TRACK"]]
(: cells whose font child says TRACK :)

//*[count(*)=3]
(: elements with exactly three children :)

//rdf:Seq/rdf:li/em:id
(: namespaced elements — the prefixes must be bound by the host tool :)

//var | //acronym
(: a union of two node sets :)

🛠 Running XPath

// browser devtools console
$x('//a[contains(@href, "docs")]');

// plain DOM API
document.evaluate('//h1', document, null, XPathResult.ANY_TYPE, null).iterateNext();
# from the shell, over XML or HTML
xmllint --xpath '//book/title/text()' catalog.xml
xmllint --html --xpath '//a/@href' page.html 2>/dev/null
from lxml import html
tree = html.parse('page.html')
tree.xpath('//div[@class="card"]/a/@href')
# Selenium and Playwright both accept XPath locators
driver.find_element(By.XPATH, '//button[normalize-space()="Save"]')
page.locator('xpath=//button[normalize-space()="Save"]').click()

⚠️ Notes

  • Indexes start at 1. [0] never matches anything.
  • //E[1] is per-parent, (//E)[1] is document-wide — the single most common XPath bug.
  • Namespaced documents need prefixes registered with the host library; in XPath 1.0 a common workaround is //*[local-name()="title"].
  • // is expensive on large documents; anchor the path when you can.
  • Prefer text matching with normalize-space() — HTML is full of stray whitespace and line breaks.

📚 Resources

  • MDN — XPath
  • MDN — XPath functions
  • XPath 1.0 specification
  • XPath cheat sheet (alephzarro)

Credit to the original author: https://gist.github.com/jmaccabee/550a0b9fcfdc7e6b170cd34c6ec7bc56