GESTION SIMPLIFIÉE D'UNE TABLE CLIENTE EN XML

LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009 - 17 oct. 2007 à 11:44
jchan Messages postés 7 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 13 avril 2009 - 24 nov. 2007 à 20:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44303-gestion-simplifiee-d-une-table-cliente-en-xml

jchan Messages postés 7 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 13 avril 2009
24 nov. 2007 à 20:29
Salut,

Je suppose que ta base doit être similaire comme ci-dessous.

<?xml version="1.0" encoding="iso-8859-1" ?>
<www.aufildutemps.info>
<client>
<nomclient>jchan</nomclient>

<designation>café</designation>
<marque>Terra</marque>
<origine>Colombie</origine>

<designation>café</designation>
<marque>Luna</marque>
<origine>Venezuela</origine>

</client>
</www.aufildutemps.info>

Pour la manip j'appelle simplement une fonction qu'il faudra
adapter.Dans le code, l'objet "xmlprd" est le document XML et txtarea1 est une zone de texte pour l'affichage.

function listprd()
{
var nomcli = ""jchan"";
var numprd = "123456";

var odocxml = xmlprd.selectSingleNode("//client[nomclient=" + nomcli + "]");

for(var i=0;i<odocxml.childNodes.length;i++)
{ if(odocxml.childNodes.item(i).nodeName "produit" && (odocxml.childNodes.item(i).attributes.getNamedItem("id").text numprd))
{
var oxmlprd = odocxml.childNodes.item(i);
txtarea1.value += "\n" + "Produit Numero : " + numprd + "\n"
for(var j=0;j<oxmlprd.childNodes.length;j++)
txtarea1.value += oxmlprd.childNodes.item(j).nodeName + " : " + oxmlprd.childNodes.item(j).text + "\n"
}
}
}

J'ai testé et ça marche avec IE. Pour les autres navigateurs
il faudra utiliser XPath au lieu de selectSingleNode.

Bonne continuation.
cs_crow Messages postés 5 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 10 décembre 2008
23 nov. 2007 à 12:46
Bonjour,

Je trouve ce script très bien même si je comprend pas forcément tout ce qu'il fait... anfin, je cherchais un script comme celui-la pour faire une recherche de produit avec un part au lieu du numero d'abonne.. le truc c'est qu'il me rapporte une seule ligne par produit alors que j'aimerais qu'il m'affiche tous les produit qui ont le même numéro... je me doute qu'il faut faire une boucle pour qu'il continue de chercher... seulemement, je ne suis pas très doué en JS et mes essais ont été negatif...

Peux-tu m'aider ?

Merci d'avance.
jchan Messages postés 7 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 13 avril 2009
21 oct. 2007 à 06:36
Je n'ai pas trouvé de virus sur ce zip.J'utilise la dernière version (v.12) de McAfee VirusScan avec la dernière maj de DAT. J'ai remplacé le zip pour plus de sureté.
cs_pilou_77 Messages postés 1 Date d'inscription dimanche 26 juin 2005 Statut Membre Dernière intervention 20 octobre 2007
20 oct. 2007 à 12:01
je signale que mon anti-virus 'a-squared' a détecté un 'Heuristic.ArchiveBomb' à la vérification du .zip de ce code.

bonne réception
jchan Messages postés 7 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 13 avril 2009
17 oct. 2007 à 16:12
Effectivement dans cette source le code n'est pas optimisé. Une fonction primitive
pour la création d'une ligne dans la table serait mieux, voir la création d'une
classe pour toutes les opérations.Mais ce n'était pas le but d'écrire un code
professionnelle où il ne reste plus rien à faire.Sur les forums on trouve des
bouts de codes pour manipuler une base xml mais pas d'exemple complet.D'où cette
petite contribution.

Pour le test si l'élément existe bien, la function GetItemRec(numero) effectue
cette opération. Elle retourne le noeud correspond au numero client s'il existe
sinon null.


Pour les droits admins pour l'éxécution du programme,j'ai codé trop vite. En
plaçant les sources dans le répertoire "Documents partagés", le problème est résolu.
PS:Avec du recul,je me suis dis que c'était pas normal.

En résumé avec PHP c'est la solution pour une version portable.Je commence tout juste
à m'y mettre (encore novice en la matière).

jchan.
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
17 oct. 2007 à 11:44
Salut,

Bon, je n'ai pas tout regarde en detail, mais voici quelques remarques:
- Tu fais beaucoup d'appels a getElementById() pour le meme element. Un exemple parmis d'autres:
document.getElementById(objTR.id).appendChild(objTD0);
document.getElementById(objTR.id).appendChild(objTD1);
document.getElementById(objTR.id).appendChild(objTD2);
document.getElementById(objTR.id).appendChild(objTD3);
document.getElementById(objTR.id).appendChild(objTD4);
document.getElementById(objTR.id).appendChild(objTD5);
document.getElementById(objTR.id).appendChild(objTD6);

(et tu en fais pleins d'autres dans la meme fonction). Ces appels sont couteux. Pourquoi ne pas en faire un seul et stocker le resultat dans une variable ?
Et puis tu pourrais en profiter pour tester que l'element existe bien (il devrais etre la mais on ne sait jamais avec ces navigateurs :o) )

- Si j'ai bien compris, ton code marche uniquement sur IE. Appelons ca un exercice de style, mais ce n'est pas vraiment le but de IE et javascript d'ecrire ce genre d'application (surtout si il faut les privileges admin, donc, probablement modifier les reglages de securite (il y a des raisons si par defaut, cela n'est pas autorise...)).

AMHA, tu aurais pu poster au choix:
- Un exemple court montrant comment lire et ecrire un fichier xml en local avec les droits admins et IE (c'est le seul point original de ton source)
- Une gestion de table clients portable (eventuellement avec un script de 3 lignes php te permettant de mettre ton fichier xml sur le serveur)
- Les deux, mais separement :o)

Eric
Rejoignez-nous