简体   繁体   中英

curl and xmllint pipe

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 - arghere . I personally don't like that stdin is not the default but I'm not the author.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM