Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

curl and xmllint pipe

Tags:

curl

xml

xmllint

I try to pipe curl and xmllint to parse the xml output from an url. But for some reason xml won't parse the xml and instead the resulting xml from the curl is shown. I'm a missing a setting? If is store the result of the curl action as a file and use that as an input for xmllint it parses correctly.

 curl --location --header "Accept: application/rdf+xml" http://www.test.com | xmllint --format - --xpath '//title'
like image 951
Thomas Avatar asked Nov 11 '13 14:11

Thomas


2 Answers

Seems that xmllint requires the - stdin redirect be at the end of the command.

curl --location --header "Accept: application/rdf+xml" http://www.test.com \
  | xmllint --format --xpath '//title' -
like image 197
bishopthom Avatar answered Nov 10 '22 23:11

bishopthom


more succinct

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

Explanation:

Here we are piping the xml from the curl command into the xmllint command. The xmllint man page says

$ 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 - ).

So that's why we do xmllint --format - because this particular command will read from stdin if you specify - as the filename. Sidenote, there's a discussion about the - arg here. I personally don't like that stdin is not the default but I'm not the author.

like image 9
Harry Moreno Avatar answered Nov 10 '22 22:11

Harry Moreno