如何抑制过度冗长的xpath输出?

时间:2013-12-09 16:51:52

标签: xml shell xpath

我在shell脚本中使用xpath(在Mac OS X 10.9 usr/bin/xpath5.16中提供)来解析XML文件中的某些值,这些值非常有效。但它给了我一些详细的输出,我不想在我的脚本中看到。我实际上只想将结果(属性的内容)存储在变量中。

content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode)
echo "$content"

执行后,变量content确实包含属性的内容,但是我还想要摆脱一些冗长的输出。这是:

Found 1 nodes:
-- NODE --

 android:versionCode="38"

注意:输出末尾的“38”来自echo "$content"行,其余的是xpath的输出。

4 个答案:

答案 0 :(得分:4)

找到解决方案。只需将2>/dev/null附加到命令:

content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode 2>/dev/null)

输出:

 android:versionCode="38"

答案 1 :(得分:2)

来自man xpath

-q
    Be quiet. Output only errors (and no separator) on stderr.

最好使用xpath -q ...而不是管道所有stderr消息。这将确保将继续打印实际错误,但不会打印其他状态输出/节点分隔符。

答案 2 :(得分:0)

-q 对我不起作用。由于xpath utulity在std-err上打印额外的输出,只需将其重定向到/ dev / null

xpath file.xml  '/foo/bar/text()' 2>/dev/null

答案 3 :(得分:0)

很抱歉,大家不满,但请看一下Open Directory关键字属性的此输出实例,它由文本字符串组成,每个文本字符串都是dscl plist输出中的一个节点:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>dsAttrTypeStandard:Keywords</key>
        <array>
                <string>nelve0jfO</string>
                <string>qPknu6</string>
                <string>cic3-bubcd</string>
        </array>
</dict>
</plist>


 /usr/bin/xpath "//string[.]/text()"

输出(控制台打印为4行):

找到3个节点: -节点-

nelve0jfO--节点-

qPknu6--节点-

cic3-bubcd

/usr/bin/xpath "//string[.]/text()" 2>/dev/null

输出:

nelve0jfOqPknu6cic3-bubcd

没有换行...

谁知道是否可以在查询语法中附加字段定界符?