2012-08-15 17 views
16

ho visto questa sintassi diversi luoghi (ad esempio, here):xmllint sconosciuto opzione '--xpath'

xmllint --xpath '/plist/array/string/text()' tmp.xml, usato per interrogare un particolare nodo XML utilizzando un selettore XPath. Tuttavia, sto ricevendo l'errore Unknown option --xpath quando provo ad eseguirlo sulla mia macchina (mac os x snow leopard).

Guardando più da vicino la pagina man per xmllint, non vedo l'opzione --xpath documentato ...

Sono solo totalmente manca qualcosa qui?

+1

anche io non può trovare l'opzione '--xpath' (sulla mia macchina Linux) ma nel mio caso 'xmllint' conosce questa opzione:' xmllint | grep xpath' return '--xpath expr: valuta l'espressione XPath, inply --noout'. Mostraci l'output del comando 'xmllint --version'. Forse questo programma dovrebbe essere compilato con/o senza supporto XPath? .. –

+0

Vedi @ steve.sims rispondi a [questa domanda] (http://stackoverflow.com/questions/11611385/get-value-from-an-attribute- using-xmllint) per usare versioni precedenti di xmllint che non supportano l'argomento --xpath. – mmigdol

risposta

4

Ah, sì, deve essere stato un problema con una versione obsoleta di libxml2.

L'aggiornamento libxml2 (a v2.7.8) tramite macports sembra aver risolto il problema.

+6

Come aggiornare la versione di libxml per supportare l'opzione --xpath –

1

Se si desidera manipolare i file plist dalla riga di comando su un Mac, utilizzare PlistBuddy.

Ad esempio, si può fare questo genere di cose in uno script di shell:

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

E 'molto potente, è possibile aggiungere/eliminare gli elementi in array e dizionari, cercare i valori con chiave o indicizzati, copiare/unire/importare altri file, ecc. Vedere /usr/libexec/PlistBuddy -h per informazioni complete.

5

Per alcune persone l'aggiornamento non è un'opzione. Devi lavorare con la versione fornita, che è installata da qualche altro team e tu vai con esso.

Si può provare attraverso --shell:

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

Thankyou @Trompa, questo ha dimostrato che è possibile con un vecchio xmllint; Ho usato il comando xmllint --shell 'cat' per estrarre una porta listener HTTP tomcat in 1-linea così: 'echo" cat //Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@ porto "| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \ "'/ =/{print $ 2;}'' –

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

Se avete bisogno di fare xmllint leggere stdin:

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