11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour a tous,

Je vous expose mon problème :
- j'ai un fichier XML contenant des stats de fiches produits (celui ci fait près de 300 000 lignes)
- je dois donc parser ce fichier partiellement sur différente page
- mais ma requête ajax avec jquery n'est pas très logique car elle attend de récupérer la totalité du contenu xml pour ensuite me sélectionner que les lignes qui m'interresse (sur un fichier de cette taille ce n'est pas rien vous imaginez bien. Temps de chargement, voir souvent plantage total)

Ma question est : Puis-je sélectionner mes lignes a retournées et ne traiter que celle ci ?

voici un extrait du xml (test.xml) :


<?xml version="1.0" encoding="utf-8"?><root>
	<famille id="01">
		<prod id="01" index="0101">
			<name_prod>nom produit 0101</name_prod>
			<ref_prod>ref0101</ref_prod>
			<hist>
				<an_2009>
					<janv>
						<pvm>0</pvm>
						<ec>2</ec>
						<qt>4302</qt>
						<ben>29925845</ben>
						<rb>0.85</rb>
					</janv>
					<fev>
						<pvm>0.35</pvm>
						<ec>31</ec>
						<qt>5839</qt>
						<ben>23210861</ben>
						<rb>0.25</rb>
					</fev>
					<mar>
						<pvm>0.05</pvm>
						<ec>35</ec>
						<qt>4509</qt>
						<ben>25788617</ben>
						<rb>0.4</rb>
					</mar>
					<avr>
						<pvm>0</pvm>
						<ec>14</ec>
						<qt>3247</qt>
						<ben>25707262</ben>
						<rb>0.2</rb>
					</avr>
					// ect ... <dec></dec>
				</an_2009>
			</hist>
		</prod>
	</famille>
</root>






voici ma requête jquery :


$(document).ready(  
 function()
 {
   $.ajax( {
            type: "GET",
            url: "test.xml",
            dataType: "xml",
            success: function(xml) 
                     {
                       $(xml).find('prod#01').each(   
                         function()
                         {
                           
                         // mon traitement de chaque fiche
                          
                          });
                      }
        });
  }
);



Merci beaucoup
Modifié par teeko (10 Apr 2009 - 16:11)
peux tu passer par du code intermédiaires???

je m'explique :

considères que ton xml est une base de données.
tu fais ton trainement coté serveur via un script (php ou autre)
tu renvois que l'info minimum nécessaire.

est ce que je me suis bien exprimé?
a écrit :
considères que ton xml est une base de données.

avec grand plaisir Smiley cligne

a écrit :
tu fais ton trainement coté serveur via un script

je ne peux pas faire de traitement par un serveur, le tout doit être autonome pour le poste client à partir du moment ou il a télécharger le xml.

Merci pour ta réponse réactive Smiley cligne
une chose a comprendre :

où tu mets le fichier xml?


PS: de nada, j'écris de la doc technique, alsacreation est ma fenêtre de pause...
il faut comprendre que si tu utilises un fichier de 300 000 lignes
et que tu cherches tous les prod avec un id=01, ton script va lire ligne par ligne document.

(d'ou l'interet des index en base de données.)

il faudrait peut etre tourner le problème autrement non?

as tu essayé de donner plus de condition a ton Selecteur jQuery? genre :'famille#01 > prod#01'

sinon je t'avourai que je ne voie pas

PS : est ce que tu utilises un service web sur un SGBD genre MS SQL ?
le problème ne vient de ma condition puisque celle-ci n'a pas d'importance dans cette exemple puisque que tout le fichier xml est récupéré et après analyser. ce que je voudrai serai de ne recevoir que les produits que je souhaite et ne plus traiter la totalité du fichier à chaque fois.

Tu vois ce que je veux dire ?

Merci pour ton aide
teeko a écrit :
le problème ne vient de ma condition puisque celle-ci n'a pas d'importance dans cette exemple puisque que tout le fichier xml est récupéré et après analyser. ce que je voudrai serai de ne recevoir que les produits que je souhaite et ne plus traiter la totalité du fichier à chaque fois.

Tu vois ce que je veux dire ?

Merci pour ton aide


C'est justement l'intérêt des bases de données. Smiley cligne
Je sais bien Smiley cligne donc selon toi (Patidou) ce que je demande est impossible sans passée par de la "vrai" base de donnée type MySQL,... ?
je te rappelle ta question :
a écrit :
Ma question est : Puis-je sélectionner mes lignes a retournées et ne traiter que celle ci ?


la réponse est donc oui tu peux le faire, mais ce n'est pas avantageux de le faire coté client vue les volumes....
J'ai trouvé une solution intermédiaire viable, j'ai divisé mon fichier xml en 3 (100 000 lignes chacun) et je fais 3 requêtes au lieu d'une.

Il y a peu être mieux mais en tout cas ça fonctionne dans mon cas de figure vue le nombre d'utilisateur Smiley cligne .

Merci pour vos réponses
Modifié par teeko (10 Apr 2009 - 16:14)
Bonjour, je suis loin d'être un expert de JQuery mais cette lib ne traite-t-elle pas l'information via DOM, alors que ce qu'il te faudrait SAX ?