Hi everybody,

I'm taking time to post message here because, i have a problem which making
me crazy.

I'm trying to design a Rake Task which parse XML file and create some drill
down on products categories.

To begin my explanation, some file and function.

First, my XML file

<root>
> <categorie>
>     <name>Voitures</name>
>     <sous_menu>
>         <name>Débutant</name>
>         <page>
>             <id>211</id>
>         </page>
>     </sous_menu>
>     <sous_menu>
>         <name>Intermédiaires</name>
>         <page>
>             <id>418</id>
>         </page>
>         <sous_menus>
>             <sous_menu>
>                 <name>Dnano</name>
>                 <page>
>                     <id>769</id>
>                 </page>
>             </sous_menu>
>             <sous_menu>
>                 <name>Mini Z</name>
>                 <page>
>                     <id>710</id>
>                 </page>
>             </sous_menu>
>             <sous_menu>
>                 <name>Mini Z Drift</name>
>                 <page>
>                     <id>783</id>
>                 </page>
>             </sous_menu>
>         </sous_menus>
>     </sous_menu>
>     <sous_menu>
>         <name>Expérimenté</name>
>         <page>
>             <id>419</id>
>         </page>
>     </sous_menu>
>     <sous_menu>
>         <name>Monster Truck</name>
>         <page>
>             <id>420</id>
>         </page>
>     </sous_menu>
> </categorie>
> </root>


Pastie link : http://pastie.org/459107


Second, my main Rake Task

# Affichage d un message
>     p '### Creation Fil ariane root'
>
>     # Creation du fil d ariane root
>     root = Taxonomy.create(
>     :name => 'fxmodelrc'
>     )
>
>     # Creation des categories dites mere (Products)
>     categorie_mere_root = Taxon.create(
>       :taxonomy_id => root.id,
>       :name => 'Catégories',
>       :position => 0
>     )
>
>     # Definition du fichier XML d FXModel
>     xml_file = "#{RAILS_ROOT}/lib/tasks/fxmodel/products/menuFXModel.xml"
>
>     # Si le fichier xml est present
>     if File.exist?(xml_file)
>       # Lecture du fichier XML
>       xml = File.read(xml_file)
>
>       # Parse du fichier XML
>       doc = Hpricot::XML(xml)
>
>       # Recuperation de toutes les categories
>       (doc/:root).each do |categories|
>         # Pour chaque categorie
>         taxon_menu = Array.new
>
>         (categories/:categorie).each_with_index do |categorie, index_menu|
>           # On est dans une categorie (Helicoptere, Voitures, etc...)
>
>           # Preparation variable
>           taxon_sous_menu = Array.new
>
>           # Recuperation du nom de la categorie
>           taxon_menu_name = categorie.at("name").inner_html.to_s
>
>           # Concatenation pour l affichage
>           message = '### Creation Menu ' + taxon_menu_name + ' / '
>
>           # Affichage d un message
>           p message
>
>           # Creation de la categorie mere en cours
>           taxon_menu[index_menu] = Taxon.create(
>             :taxonomy_id => root.id,
>             :name => taxon_menu_name,
>             :parent_id => categorie_mere_root.id,
>             :position => index_menu
>           )
>
>           # Recuperation de l'ID mere
>           taxon_menu_id = taxon_menu[index_menu].id
>
>             # Recursive sub menu
>             recursive_sous_menu_creation(categorie, message, taxon_menu_id,
> root)
>
>
>         end
>
>       end
>     end


Pastie link : http://pastie.org/459108


Third, Recursive function "recursive_sous_menu_creation"

 def recursive_sous_menu_creation(xml, message, taxon_mother_id, root)
>
>       (xml/:'sous_menu').each_with_index do |sous_menu, index_sous_menu|
>         # Recuperation du nom du sous menu
>         sous_menu_name = sous_menu.at("name").inner_html.to_s
>
>         # Concatenation du message
>         message += sous_menu_name + ' / '
>
>         # Affichage d un message
>         p message
>
>         # Creation de la Taxon
>         taxon_sous_menu_mother = Taxon.create(
>           :taxonomy_id => root.id,
>           :name => sous_menu_name,
>           :parent_id => taxon_mother_id,
>           :position => index_sous_menu
>         )
>
>         p taxon_sous_menu_mother.id.to_s + " " +
> taxon_sous_menu_mother.name  + " " + taxon_sous_menu_mother.parent_id.to_s
>
>         # Recuperation des pages s il y en a
>         if sous_menu.find_element('page')
>           # Instanciation d un tableau pour la concatenation des pages
>           array_page = Array.new
>
>           # Pour chaque page
>           (sous_menu/:page).each_with_index do |page, index|
>             # On insert l ID dans le tableau
>             array_page[index] = Integer page.at("id").inner_html.to_s
>           end
>           # Apres creation du tableau des pages
>           # Lancement de l import
>
> import_article_from_categorie_id_and_set_taxons(array_page,taxon_sous_menu_mother)
>         end
>
>         # Test si il y a des sous menus
>         if sous_menu.find_element('sous_menus')
>           # Traitement sous-menus
>           (sous_menu/:'sous_menus').each_with_index do |sous_sous_menu,
> index_sous_sous_menu|
>             recursive_sous_menu_creation(sous_sous_menu, message,
> taxon_sous_menu_mother.id, root)
>           end
>         end
>
>
>       end
>
>
>   end
>

Pastie link : http://pastie.org/459110

And, the end, the result

"#############################"
> "#      create_products      #"
> "#############################"
> "### Truncate des differentes tables produits"
> "### Suppression du contenu des dossiers public/assets/products/ et
> public/images/products/"
> "### Truncate des differentes tables pour les menus"
> "### Creation Fil ariane root"
> "### Creation Menu Voitures / "
> "### Creation Menu Voitures / Débutant / "
> "3 Débutant 2"
> "15933:FC2000:Flycam one 2 caméra version de luxe:56.97:21"
> "17537:FC2200:Flycam one 2 extreme sports box:89.8:10"
> "17541:FC2004:Caisson étanche pour flycam one 2:18.99:2"
> "17559:LOSB0235:1/36 micro raminator rtr:89.99:2"
> "18413:870010056:Nitro rs4 3 evo+ greedy 350z rtr:352.5:1"
> "### Creation Menu Voitures / Débutant / Intermédiaires / "
> "4 Intermédiaires 2"
> "16219:870010074:Hpi - nitro rs4 drift toy soarer rtr:352.5:0"
> "14196:870010256:Hpi - nitro 3 18ss:496:1"
> "16220:870010411:Nitro mt2 g3.0 rtr - hpi:436.59:0"
> "16572:46008700:Gtx 25 delta 25 2pi loisir:394:1"
> "16494:870010712:E10 drift mazda rx7 peinte rtr:148.76:2"
> "16598:870010716:E10 touring mustang gtr peinte rtr 200mm:148.76:1"
> "16957:46008900:Gtx 25 pro 3pm et nitro star 4.1:336.15:0"
> "16955:870010715:E10 touring skyline r32 peinte rtr 200mm:148.76:1"
> "17145:1400103015:Porsche 911 gt3 1/10 rtr:233.28:1"
> "17146:1400103012:Lawados 1/10 rtr:224.12:2"
> "17207:870010508:Trophy 3.5 rtr:308.79:0"
> "18369:30569PW:Miniz ma010 awd mitsubishi evo x nacre:178:1"
> "### Creation Menu Voitures / Débutant / Intermédiaires / Dnano / "
> "5 Dnano 2"
> "### Creation Menu Voitures / Débutant / Intermédiaires / Dnano / Mini Z /
> "
> "6 Mini Z 2"
> "### Creation Menu Voitures / Débutant / Intermédiaires / Dnano / Mini Z /
> Mini Z Drift / "
> "7 Mini Z Drift 2"
> "### Creation Menu Voitures / Débutant / Intermédiaires / Dnano / Mini Z /
> Mini Z Drift / Expérimenté / "
> "8 Expérimenté 2"
> "14041:870010601:Hpi - baja 1/5 rtr:999.9:1"
> "13698:304002:Hpi - carson 1/5 mercedes classe c:808.38:0"
> "16217:870010611:Hpi - baja ss 1/5:894:1"
> "18366:31315T1:Racing kart birel r31-se 1/5 ready set:251.25:1"
> "18421:G68050:Baja buggy 4wd carosserie transporteur:750:0"
> "### Creation Menu Voitures / Débutant / Intermédiaires / Dnano / Mini Z /
> Mini Z Drift / Expérimenté / Monster Truck / "
> "9 Monster Truck 2"
> "15172:87000868:Hpi - savage x 4.6 rtr:610.5:2"
> "14209:87000882:Hpi - savage 3.5:351.9:0"
> "14653:870010501:Hpi - hellfire:721.2:0"
> "17422:870010621:Baja 5t truck 1/5ième blanc rtr:1248:1"
> "16683:870010516:Savage xl 5.9 rtr:611:0"
> "17964:87000548:E-savage truck gt rtr:415.95:0"
> "17965:8700100647:Savage flux rtr:826.26:1"
> "18455:G20010R:Monster truck complet:833:1"
> "18456:G60020R:Baja buggy 26cm3 rtr:831.25:1"


*Observation*
First, my concatenation message is wrong, because, my rake task create sub
categories (Dnano, Mini Z / Mini Z Drift) on the categories "Intermédiaire",
but, it doing the same on the root of "Voiture"

All help is greathy appreciate.

Best regards,

Mickaël.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to