2012-08-15 7 views
16

Ich habe diese Syntax mehrere Orte gesehen (zB here):xmllint unbekannte Option '--xpath'

xmllint --xpath '/plist/array/string/text()' tmp.xml, verwendet, um einen bestimmten XML-Knoten abfragen einen XPath-Selektor. Allerdings bekomme ich den Fehler Unknown option --xpath, wenn ich versuche, dies auf meinem Rechner (Mac OS X Snow Leopard) auszuführen.

Bei näherem Hinsehen auf der man-Seite für xmllint, ich sehe das nicht --xpath Option dokumentiert ...

Bin ich einfach total etwas hier fehlt?

+1

Ich kann auch nicht finden '--xpath' Option (auf meiner Linux-Box), aber in meinem Fall weiß xmllint über diese Option: 'xmllint | grep xpath' return '--xpath expr: wertet den XPath-Ausdruck aus, inply --noout'. Zeigen Sie uns die Ausgabe des Befehls 'xmllint --version'. Vielleicht sollte dieses Programm mit/oder ohne XPath-Unterstützung kompiliert werden? .. –

+0

Siehe @ steve.sims Antwort auf [diese Frage] (http://stackoverflow.com/questions/11611385/get-value-from-an-attribute- using-xmllint) für die Verwendung älterer Versionen von xmllint, die das Argument --xpath nicht unterstützen. – mmigdol

Antwort

4

Ah, yep, muss ein Problem mit einer veralteten Version von libxml2 gewesen sein.

Aktualisierung libxml2 (zu v2.7.8) über Macports scheint das Problem behoben zu haben.

+6

Wie man die Version von libxml aktualisiert, um --xpath Option zu unterstützen –

1

Wenn Sie plist Dateien von der Befehlszeile auf einem Mac bearbeiten möchten, verwenden Sie PlistBuddy.

Zum Beispiel können Sie diese Art der Sache in einem Shell-Skript tun:

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

Es ist sehr mächtig, können Sie hinzufügen/löschen Elemente in Arrays und Wörterbücher, verkeilten oder indizierte Werte nachschlagen, copy/Zusammenführen/Importieren anderer Dateien usw. Weitere Informationen finden Sie unter /usr/libexec/PlistBuddy -h.

5

Für einige Leute ist die Aktualisierung keine Option. Sie müssen mit der gegebenen Version arbeiten, die von einem anderen Team installiert wurde und Sie gehen damit.

Sie können durch --shell versuchen:

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

Danke @Trompa, das hat gezeigt, dass es mit einem alten xmllint möglich ist; Ich habe den xmllint --shell Befehl 'cat' verwendet, um einen Tomcat HTTP Listener Port in 1-Zeile zu extrahieren: 'echo" cat //Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@ Hafen "| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \ "'/ =/{print $ 2;}'' –

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

Wenn Sie xmllint vornehmen müssen stdin lesen:

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