ruby - How to iterate through browsenodes returned via amazon-ecs gem item lookup call? -


i writing internal application monitor our amazon listed products , stuck amazon product advertising api (amazon-ecs) ruby gem. display on screen browse nodes similar this:

"root category" -> sub categories -> final category (the actual category item in)

    <browsenode> <browsenodeid>770071031</browsenodeid> <name>robotic vacuums</name> <ancestors>   <browsenode>   <browsenodeid>125698031</browsenodeid>   <name>vacuums</name>     <ancestors>     <browsenode>     <browsenodeid>3147711</browsenodeid>     <name>vacuums &amp; floor care</name>       <ancestors>         <browsenode>         <browsenodeid>3576359031</browsenodeid>         <name>vacuuming, cleaning &amp; ironing</name>           <ancestors>             <browsenode>             <browsenodeid>391784011</browsenodeid>             <name>kitchen &amp; home appliances</name>               <ancestors>               <browsenode>               <browsenodeid>3147411</browsenodeid>               <name>categories</name>               <iscategoryroot>1</iscategoryroot>                 <ancestors>                 <browsenode>                 <browsenodeid>11052681</browsenodeid>                 <name>kitchen &amp; home</name>                   <ancestors>                   <browsenode>                   <browsenodeid>11052591</browsenodeid>                   <name>home &amp; garden</name>                   <ancestors>                     <browsenode>                     <browsenodeid>3146281</browsenodeid>                     <name>home &amp; garden</name>                     </browsenode>                   </ancestors>                 </browsenode>                 </ancestors>                 </browsenode>               </ancestors>             </browsenode>             </ancestors>           </browsenode>           </ancestors>         </browsenode>       </ancestors>     </browsenode>   </ancestors>   </browsenode> </ancestors> </browsenode> 

so above should displayed as:

home & garden -> kitchen & home -> kitchen & home appliances -> vacuuming, cleaning & ironing -> vacuums & floor care -> vacuums

i have tried get_array, , get_hash these return value of 1 long string.

is there way want using amazon-ecs gem or should process string xml , try loop though accordingly?

this simple way there. without criteria showing how determine <name> nodes acceptable returns them all:

require 'nokogiri'  xml = <<eot <browsenode> <browsenodeid>770071031</browsenodeid> <name>robotic vacuums</name> <ancestors>   <browsenode>   <browsenodeid>125698031</browsenodeid>   <name>vacuums</name>     <ancestors>     <browsenode>     <browsenodeid>3147711</browsenodeid>     <name>vacuums &amp; floor care</name>       <ancestors>         <browsenode>         <browsenodeid>3576359031</browsenodeid>         <name>vacuuming, cleaning &amp; ironing</name>           <ancestors>             <browsenode>             <browsenodeid>391784011</browsenodeid>             <name>kitchen &amp; home appliances</name>               <ancestors>               <browsenode>               <browsenodeid>3147411</browsenodeid>               <name>categories</name>               <iscategoryroot>1</iscategoryroot>                 <ancestors>                 <browsenode>                 <browsenodeid>11052681</browsenodeid>                 <name>kitchen &amp; home</name>                   <ancestors>                   <browsenode>                   <browsenodeid>11052591</browsenodeid>                   <name>home &amp; garden</name>                   <ancestors>                     <browsenode>                     <browsenodeid>3146281</browsenodeid>                     <name>home &amp; garden</name>                     </browsenode>                   </ancestors>                 </browsenode>                 </ancestors>                 </browsenode>               </ancestors>             </browsenode>             </ancestors>           </browsenode>           </ancestors>         </browsenode>       </ancestors>     </browsenode>   </ancestors>   </browsenode> </ancestors> </browsenode> eot doc = nokogiri::xml(xml) 

here's code find nodes:

doc.search('name').map(&:text).reverse.uniq.join(' -> ') # => "home & garden -> kitchen & home -> categories -> kitchen & home appliances -> vacuuming, cleaning & ironing -> vacuums & floor care -> vacuums -> robotic vacuums" 

some entries duplicated, uniq clean them out.

see "how avoid joining text nodes when scraping" also.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

android - Inheriting from Theme.AppCompat* -