卷曲和xmllint管道

时间:2013-11-11 14:28:53

标签: xml curl xmllint

我尝试管道curl和xmllint来解析来自url的xml输出。但由于某种原因,xml不会解析xml,而是会显示curl生成的xml。 我错过了一个场景? 如果将curl操作的结果存储为文件并将其用作xmllint的输入,则会正确解析。

 curl --location --header "Accept: application/rdf+xml" http://www.test.com | xmllint --format - --xpath '//title'

2 个答案:

答案 0 :(得分:42)

似乎xmllint要求- stdin重定向位于命令的末尾。

curl --location --header "Accept: application/rdf+xml" http://www.test.com \
  | xmllint --format --xpath '//title' -

答案 1 :(得分:2)

更简洁

curl foo.com/somefile.xml | xmllint --format -

说明:

在这里,我们将{@ 3}}中的xml从curl命令转换为xmllint命令。 xmllint手册页说

$ man xmllint
> ... The xmllint program parses one or more XML files, specified on the command line as XML-FILE (or the standard input if the filename provided is - ).

这就是我们这样做的原因xmllint --format -,因为如果您将-指定为文件名,则将从stdin中读取此特定命令。旁注,有一个关于- arg piping的讨论。我个人不喜欢stdin不是默认值,但我不是作者。