我尝试管道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'
答案 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不是默认值,但我不是作者。