我使用xmllint
来选择节点,我的测试目的1.xml
看起来像这个
<resources>
<item>
<label>LABEL</label>
<value>VALUE</value>
<description>DESCRIPTION</description>
</item>
<item>
<label>LABEL</label>
<value>VALUE</value>
<description>DESCRIPTION</description>
</item>
</resources>
$ xmllint --xpath '/resources/item/value' 1.xml
<value>VALUE</value><value>VALUE</value>
命令喜欢上面的是工作良好。
然后我尝试与管道|
结合,出现错误
$ cat 1.xml | xmllint --xpath '/resources/item/value'
Usage : xmllint [options] XMLfiles ...
...(help info)
我想原因是管道传输将cat
的输出作为流处理,但xmllint
只能接收文件路径作为参数。那么,有什么办法可以解决这个问题吗?或者其他选择?
当然。如果我的猜测是错误的,指出真正的原因对我也很有帮助
抱歉
我的英语很差。请原谅语法或打字错误。我正在尽力提高。
我从未使用过xmllint
,但从它的手册页中,我可以看到:
xmllint程序解析一个或多个XML文件,在命令行上指定为XML-FILE(如果提供的文件名为-,则为标准输入
因此,以下操作应该有效:
xmllint --xpath '/resources/item/value' 1.xml
或者,如果您坚持输入应该通过stdin、
xmllint --xpath '/resources/item/value' - <1.xml
作为替代方案,您可以通过--shell
选项将xmllint命令传递到stdin
echo -e 'cat /resources/item/valuenbye' | xmllint --shell 1.xml
或
(echo 'cat /resources/item/value'; echo 'bye') | xmllint --shell 1.xml