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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---