- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema inserimento in db di dati da xml
-
Problema inserimento in db di dati da xml
Ciao a tutti.
Dopo tante peripezie, prove e riprove ho imparato ad estrarre i dati da un file xml. Avrei bisogno che qualcuno esperto mi indichi come fare per ordinare questi dati in un database mysql.La struttura del file xml è così composta:
<Category>Prodotto 1</Category> <Subcategory>Accessori</Subcategory> <Category>Prodotto 1</Category> <Subcategory>Periferica</Subcategory> <Category>prodotto 2</Category> <Subcategory>Accessori</Subcategory> Ecc. ```Essendo che le tabelle del db sono cosi composte: id, lingua, nome_categoria, vorrei che qualcuno mi indirizzasse su come fare per inserire tutti i dati di del campo xml <Category> e successivamente le rispettive sottocategorie, sempre all'interno del campo db nome_categoria. Purtroppo il campo da utilizzare deve essere per forza quello perché il db è strutturato in questo modo. Del resto se ci fosse un altra tabella probabilmente facendo (molte!) prove ci arriverei anche ad una soluzione ma cosi non ce la faccio proprio. In pratica lo script dovrebbe fare cosi: 1) Inserisce la categoria 2) Inserisce tutte le sottocategorie corrispondenti alla categoria appena inserita 3) Inserisce la categoria successiva 4) inserisce le sottocategorie corrispondenti e così via. Io fino all'inserimento delle categorie ci arrivo ma poi vengono fuori solo casotti inimmaginabili (purtroppo inizio adesso i lavori complicati con i db). NB: Nel file xml categorie e sotocategorie non sono sempre consecutive, cioé potrebbe esserci
<Category>Prodotto 1</Category> <Subcategory>Accessori</Subcategory> <Category>Prodotto 2</Category> <Subcategory>Periferica</Subcategory> <Category>prodotto 1</Category> <Subcategory>Accessori</Subcategory>
Ecc.
Grazie in anticipo.
-
Onestamente quella che hai scritto non è una struttura xml corretta, per come l'hai scritta un equivalente corretto sarebbe:
<Category name="Prodotto 1"> <Subcategory>Accessori</Subcategory> <Subcategory>Accessori</Subcategory> </Category> <Category name="Prodotto 2"> <Subcategory>Periferica</Subcategory> </Category>
-
Ciao,
scusa ma in effetti ho omesso parte della struttura <Categories> e </Categories> per intenderci, ed ho utilizzato soltanto i "child" perché è li che volevo far porre l'attenzione. Mi interessava solamente che qualcuno mi aiutasse a risolvere il problema di come manipolarli una volta estratti ed ordinarli e inserirli nel db.
-
Ripeto che se quella che hai postato è una parte contigua di file xml allora è errato.
Comunque, supposto che li sai leggere dall'XML, non è necessario che segui la logica che hai scritto, perchè una volta su db bastas che quando leggi ordini correttamente. Qui devi fare così:
leggi da XML la riga
se è una categoria la cerchi su db e prendi l'ID
se non c'è la inserisci e prendi l'ID
se è una sub la inserisci con l'ultimo ID di categoria trovato
-
No, no guarda, ti giuro che non ho difficoltà nell creazione e lettura degli xml.Anzi per tagliare la testa al toro ti posto il codice originale.
<Products> <Product> <InternalID>104</InternalID> <Code>8033064531670</Code> <Description>3 penni vari dsi</Description> <Category>Nintendo DSi</Category> <Subcategory>Accessori</Subcategory> </Product> <Product> ecc. ecc </Products> ```Il mio problema è che siccome questi dati vanno inseriti in un db già pronto (oscommerce per intenderci), è necessario che i dati siano ordinati prima di essere inseriti nel db. In pratica lo script dovrebbe leggere prima tutte le categorie e se non ci sono deve crearle nel campo "nome_categoria". Ora, siccome oscommerce utilizza lo stesso campo sia per le categorie che per le sottocategorie, a me servirebbe proprio che immediatamente dopo aver creato la categoria lo script va a prendere tutte le sottocategorie dalle rispettive categorie nel file xml. E' questa cosa che mi fa impazzire altrimenti avrei già risolto nella maniera in cui mi indichi tu. Poi tieni presente che le id del database non sono con autoincrement e che quindi le deve creare lo script. Ma per queso non ho problemi. Io proprio non arrivo a mettere in ordine i dati prima di essere inseriti nel db. Se qualcuno riesce a farmi un esempio su come gestire l'ordinamento in un file xml, ci arrivo sicuramente. una cosa del tipo leggi dall'xml tutti i prodotti della categoria Product e con un echo mi esce qualcosa tipo Categoria: Nomecategoria 1 Sottocategoria: Nomesottocategoria 1 Sottocategoria: Nomesottocategoria 2 Sottocategoria: Nomesottocategoria 3 Categoria: Nomecategoria 2 Sottocategoria: Nomesottocategoria 1 Sottocategoria: Nomesottocategoria 2 Sottocategoria: Nomesottocategoria 3 ecc. Cioé un metodo tipo il SELECT * FROM -- ORDER BY -- ecc" del mysql però che si possa utilizzare per xml (ammesso che esista questo metodo). Chi mi fa questo mega favore?
-
Dovresti ordinare i nodi dell'xml, però forse ti conviene fare come si diceva prima, mettere tutto su un DB temporaneo (che lo sai fare) poi leggere da questo per creare l'xml per oscommerce.
Senno' devi caricarti in un array tutte le categorie, fare un sort (con la funzione php sort() ) e poi fare un loop sull'array delle categorie per cercarti tutte le sub della categoria che stai trattando (questo con xml lo fai senza problemi)