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'
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' -
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With