[erlang-questions] Parsing XML with xmerl_xpath/string/2

lloyd@REDACTED lloyd@REDACTED
Wed Apr 15 22:15:20 CEST 2015


Well, pick myself up from one stumble only to trip over the next.

I've successfully downloaded an XML book file from Amazon and extracted title and author code using this function, much of which I borrowed from Dave Thomas:

get_book_data(ISBN) ->
   {ok, {_Status, _Headers, Body}} = httpc:request(get_book_request(ISBN)),
   {Xml, _Rest} =  xmerl_scan:string(Body),
   [ #xmlText{value=Author}] = xmerl_xpath:string("//Author/text()", Xml),
   [ #xmlText{value=Title}] = xmerl_xpath:string("//Title/text()", Xml),
   [ #xmlText{value=Publisher}] = xmerl_xpath:string("//Manufacturer/text()", Xml),
   {Author, Title, Publisher}.

That same file has URLs for downloading book cover images. The XML looks like this:

...
<LargeImage>
  <URL>
      http://ecx.images-amazon.com/images/I/51shI6vQ-SL.jpg
  </URL>
      <Height Units="pixels">500</Height>
      <Width Units="pixels">333</Width>
</LargeImage>
...

Modifying get_book_data/1 to include a xmerl_xpath:string/2 call that looks like this:

   [ #xmlText{value=LargeImage}] = xmerl_xpath:string("//LargeImage/text()", Xml),

fails:

** exception error: no match of right hand side value []
     in function  amz_lookup:get_book_cover_images/1 (/home/lloyd/wga/site/src/LitUtils/amz_lookup.erl, line 110)

My hunch is that the string "//LargeImage/text())" is the problem. xmerl_xpath:string/2 docs give me no comfort. Clearly I don't understand them sufficiently.

I've tried xmerl_xpath:string("//URL/text()"), xmerl_xpath:string("//LargeImage/URL/text()"), etc. etc. etc.--- all to no avail. Google search also comes up empty.

So once more to the well of wisdom. Can some kind soul point out the error of my ways?

All the best,

LRP
















More information about the erlang-questions mailing list