2012-08-15 150 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()'