2012-08-15 76 views
16

我已經看到了這個語法幾個地方(例如,here):xmllint未知選項「--xpath」

xmllint --xpath '/plist/array/string/text()' tmp.xml,用於查詢使用XPath選擇一個特定的XML節點。但是,當我嘗試在我的機器上執行此操作時(mac os x snow leopard),我收到了錯誤Unknown option --xpath。在爲xmllint手冊頁

仔細看,我沒有看到--xpath選項記錄...

我只是完全失去了一些東西?

+1

我也找不到'--xpath'選項(在我的Linux機器上),但在我的例子中'xmllint'知道這個選項:'xmllint | grep xpath' return'--xpath expr:計算XPath表達式,inply --noout'。向我們顯示'xmllint --version'命令的輸出。也許這個程序應該被編譯/或不XPath的支持?.. – 2012-08-15 19:36:25

+0

見@ steve.sims答案[這個問題](http://stackoverflow.com/questions/11611385/get-value-from-an-attribute- using-xmllint)用於使用不支持--xpath參數的較舊版本的xmllint。 – mmigdol 2014-07-17 00:51:42

回答

4

嗯,沒錯,一定是與libxml2一個過時版本的問題。

經由MacPorts的更新libxml2(至v2.7.8)似乎已經解決了這一問題。

+6

如何更新的libxml版本支持--xpath選項 – 2013-11-07 13:55:55

1

如果您想在Mac上從命令行操作plist文件,請使用PlistBuddy

例如,你可以做這樣的事情在一個shell腳本:

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

它非常強大,您可以添加/刪除數組和字典項,查找鍵或索引值,複製/合併/導入其他文件等。詳細信息請參閱/usr/libexec/PlistBuddy -h

5

對於一些人來說是更新不是一個選項。 您必須使用由其他團隊安裝的給定版本,然後使用它。

你可以通過--shell嘗試:

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

三江源@Trompa,這表明它可能與舊xmllint;我用xmllint --shell命令「貓」在1行從而以提取一個Tomcat HTTP監聽端口: '回聲「貓//Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@端口「| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \「'/ =/{print $ 2;}'' – 2015-10-08 16:39:10

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

如果您需要xmllint到標準輸入讀取:

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