Estoy usando el shell interactivo de xmllint en cygwin. Me gustaría contar el número de nodos, pero xmllint no parece comportarse como esperaba:
$> cat test.xml
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
$> xmllint --shell test.xml
/ > cat count(/result/node/item)
count(/result/node/item) is a number
Dice que es un número, pero no muestra el número de la manera que he visto en las búsquedas web:
count(/result/node/item) is a number : 5
¿Qué está pasando aquí?
$> xmllint --version
xmllint: using libxml version 20706
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib
Respuesta1
Me doy cuenta de que @Stephane mencionó esto en los comentarios, pero encontré esta técnica e iba a publicar esta respuesta antes de ver su comentario con la misma solución. No estoy seguro de la etiqueta para esto, pero esto es lo que encontré. LMK y yo podemos eliminar esta respuesta si no es apropiado publicar una respuesta en el comentario de otra persona.
Solución
Debe utilizar el xpath
comando dentro de xmllint para mostrar el resultado que devuelve la count
función.
$ xmllint --shell test.xml
/ > cat
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
/ > xpath count(/result/node/item)
Object is a number : 5
/ >
Encontré la respuesta aquí en este sitio:Jugar con expresiones XPath en el shell xmllint.