2012-08-15 17 views
16

he visto esta sintaxis varios lugares (por ejemplo, here):xmllint opción desconocida '--xpath'

xmllint --xpath '/plist/array/string/text()' tmp.xml, que se utiliza para consultar un nodo XML particular usando un selector XPath. Sin embargo, recibo el error Unknown option --xpath cuando intento ejecutar esto en mi máquina (mac os x snow leopard).

Mirando más de cerca la página del manual de xmllint, no veo la opción --xpath documentado ...

solo estoy totalmente perdiendo algo?

+1

También puede no encontrar la opción '--xpath' (en mi caja de Linux) pero en mi caso 'xmllint' conoce esta opción:' xmllint | grep xpath' return '--xpath expr: evalúa la expresión XPath, inply --noout'. Muéstranos el resultado del comando 'xmllint --version'. ¿Tal vez este programa debería compilarse con o sin soporte XPath? ... –

+0

Ver @ steve.sims respuesta a [esta pregunta] (http://stackoverflow.com/questions/11611385/get-value-from-an-attribute- using-xmllint) para usar versiones anteriores de xmllint que no admiten el argumento --xpath. – mmigdol

Respuesta

4

Ah, sí, debe haber habido un problema con una versión obsoleta de libxml2.

Al actualizar libxml2 (a v2.7.8) via macports parece que se ha solucionado el problema.

+6

Cómo actualizar la versión de libxml para admitir --xpath opción –

1

Si desea manipular los archivos plist desde la línea de comandos en una Mac, use PlistBuddy.

Por ejemplo, se puede hacer este tipo de cosas en un script de shell:

BUNDLE_ID=`/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' Info.plist` 
echo $BUNDLE_ID 

Es muy potente, se puede añadir/eliminar elementos de las matrices y los diccionarios, buscar valores con clave o indexados, copiar/fusionar/importar otros archivos, etc. Ver /usr/libexec/PlistBuddy -h para más información.

5

Para algunas personas la actualización no es una opción. Tienes que trabajar con la versión dada, que es instalada por otro equipo y tú la aceptas.

Usted puede tratar a través --shell:

xmllint --shell tmp.xml << EOF 
'/plist/array/string/text()' 
EOF 
+1

Gracias @Trompa, esto demostró que es posible con un antiguo xmllint; Utilicé el comando xmllint --shell 'cat' para extraer un puerto de escucha HTTP de tomcat en 1 línea así: 'echo" cat //Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@ puerto "| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \ "'/ =/{print $ 2;}'' –

5
xmllint --shell tmp.xml <<<'xpath /plist/array/string/text()' 

Si usted necesita para hacer xmllint para leer la entrada estándar:

cat /tmp/tmp.xml | xmllint --shell <(cat) <<<'xpath /plist/array/string/text()' 
Cuestiones relacionadas