Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2554 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] dom ? Xpath ? infos !![résolu!!!] merci mozilla :)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS] dom ? Xpath ? infos !![résolu!!!] merci mozilla :)

n°290606
k666
dites non à petitmou
Posté le 21-01-2003 à 10:58:24  profilanswer
 

hello
j'aimerais savoir s'il existe Xpath ou un truc semblable pour trouver un noeud particulier d'un objet dom dans JS ?
 
je sais pas si je me suis bien exprimé ..
en fait le problème pour l'instant c que je suis obligé de faire des boucles récursives de malade pour trouver le bon noeu à modifier et ça rame et c pas très bon, donc e cherche peut être des méthodes propres à dom permettant de retrouver rapidement une branche, un noeud donné ? j'espère que vous pouvez me répondre car ça urge un peu :o  et que je galère pour l'instant à coder mes propres méthodes xpath foireuses :/
 
voilà et si possible il me faudrait un truc qui marche sur ie et mozilla ... mais je trouve pas trop de liens à ce sujet sue le net :/


Message édité par k666 le 21-01-2003 à 21:56:54
mood
Publicité
Posté le 21-01-2003 à 10:58:24  profilanswer
 

n°290609
walli
Posté le 21-01-2003 à 11:00:01  profilanswer
 

Fait voir un bout de ton code ou tu fais une boucle...
 

n°290620
k666
dites non à petitmou
Posté le 21-01-2003 à 11:06:55  profilanswer
 

hum bon c neuf, je viens de commencer hein donc pas taper :D
 
mais bon c pas le but du jeu, je veux pas corriger mon code, mais trouver un truc fait pour ça, je veux pas réinventer la roue, j'ai surtout pas le temps car fo ke je finisse une tonne de méthodes pour vendredi, fo que si on me dit:
rajoute  
  noeud:
  /module/utilisateur/preferences/volume_audio
  valeur:
  10
 
je puisse éventuellement créer un noeud tel que ...
 
<module>
  <utilisateur>
      (.......)
    <preferences>
      (.......)
      <volume_audio>
        10
      </volume_audio>
    </preferences>
  </utilisateur>
</module>
 
 
 
bon le code que j'ai commencé à faire c de la merdouille mais bon pas le choix :/
 
 

Code :
  1. // recherche à partir d'un noeud d'entrée un noeud ou tableau de noeuds
  2. // suivant un motif donné ...
  3. function findNode(entryNode,strPath)
  4. {
  5. if (entryNode == null)
  6. {
  7.  return null;
  8. }
  9. var node = entryNode ;
  10. var match = firstElement(strPath);
  11. var reste = resteOf(strPath);
  12. if ( match != "" )
  13. {
  14.  var tmp = node.childNodes;
  15.  var returnedObjs = new Array();
  16.  var cnt = 0;
  17.  for ( var i = 0 ; i < tmp.length ; i ++ )
  18.  {
  19.   var tmpret = null;
  20.   switch(node.nodeType)
  21.   {
  22.    // element
  23.    case 1:
  24.     if (tmp[i].nodeName == match)
  25.      tmpret = findNode(tmp[i],reste);
  26.     break;
  27.    // document
  28.    case 9:
  29.     tmpret = findNode(tmp[i],strPath);
  30.     break;
  31.    // texte
  32.    case 3:
  33.    // process instruction
  34.    case 7:
  35.    // CDATA
  36.    case 4:
  37.    // comment
  38.    case 8:
  39.    case 10:
  40.    default : tmpret = null;
  41.   }
  42.   if (tmpret != null)
  43.   {
  44.    returnedObjs[cnt++] = tmpret;
  45.   }
  46.  }
  47.  if (returnedObjs.length < 1)
  48.  {
  49.   return null;
  50.  }
  51.  else
  52.  {
  53.   return returnedObjs;
  54.  }
  55. }
  56. else
  57. {
  58.  return entryNode ;
  59. }
  60. }
  61. // renvoi le premier mot d'une chaine slashée /aze/zer/ert => aze
  62. function firstElement(slashString)
  63. {
  64. var tmp = slashString.split("/" );
  65. if (tmp.length >= 2)
  66. {
  67.  return tmp[1];
  68. }
  69. return "" ;
  70. }
  71. // renvoi le reste d'une chaine slashée /aze/zer/ert => /zer/ert
  72. function resteOf(slashString)
  73. {
  74. var tmp = slashString.split("/" ) ;
  75. var ret = "" ;
  76. if (tmp.length >= 2)
  77. {
  78.  for ( var j = 2 ; j < tmp.length ; j ++ )
  79.  {
  80.   ret += "/" + tmp[j] ;
  81.  }
  82. }
  83. return ret ;
  84. }
  85. /// c cette fonction qui declenche le traitement
  86. function test()
  87. {
  88. var xmlDocument = getXMLDocumentFromFrame(parent.xml_data);
  89. var tmp = xmlDocument ;
  90. var prout = findNode(tmp,"/information/scorm" );
  91. alert(prout);
  92. }


Message édité par k666 le 21-01-2003 à 11:08:26
n°290630
k666
dites non à petitmou
Posté le 21-01-2003 à 11:17:18  profilanswer
 


walli  
  Posté le 21-01-2003 11:13:01                  
 
--------------------------------------------------------------------------------
Ton noeud, tu le rajoutes dans quoi ?  
 
 
 
k666  
  Posté le 21-01-2003 11:16:13                        
 
--------------------------------------------------------------------------------
bin ça rajoute pas encore de noeu... pour l'instant ça renvoi un tableau avec tous les chemins possibles, paske il se peut qu'un noeud soit pas unique ...
ça renvoi donc la référence vers le noeud donné, et après tu peux créer des sous noeuds ...
mais bon jlai fait vite fait et me suis rendu compte tout de suite de la complexité du code à développer et c pour ça que je cherche un truc préfait pour pas me prendre la tête :// et c pour ça que je demande aux connaisseurs de m'aider!!!! je dois vraiment avancer et je peux pas réinventer la roue, car c pour vendredi            

n°290651
k666
dites non à petitmou
Posté le 21-01-2003 à 11:39:17  profilanswer
 

apparemment il y a JSPATH pour mozilla, et il y a selectNodes() dans MSXML .... mais bon je cherche un truc ommun aux deux, ou bien à défaut de ceci, de l'aide en général, des expériecnes témoignages etc...

n°290657
walli
Posté le 21-01-2003 à 11:46:19  profilanswer
 

Pour Mozilla je sais pas.
Pour IE, effectivement tu as selectNodes().
En fait tu fait un  

Code :
  1. selectNodes("//module/utilisateur/preferences/volume_audio" )


Et pour chaque noeud trouvé, tu boucles jusqu'a etre remonte à la racine...
Y a pas de méthode toute faite pour ce genre de choses (je crois pas), tu vas donc être forcé de pondre un minimum de code...
 
 
 

n°291289
k666
dites non à petitmou
Posté le 21-01-2003 à 21:55:20  profilanswer
 

bon, comme je suis super sympa je vais ous donner la solution ;) j'ai construit un ptit script d'adaptation, pour que l'on puisse parler de la meme façon à un DOM sous ie et sous mozilla ...
 

Code :
  1. function scriptableXml(domtarget)
  2. {
  3. this.doc = domtarget ;
  4. }
  5. function getXMLDocumentFromFrame (frameWindow) {
  6.    if (frameWindow.document && frameWindow.document.XMLDocument) {
  7.      return frameWindow.document.XMLDocument;
  8.    }
  9.    else {
  10.      return frameWindow.document;
  11.    }
  12. }
  13. function isIE()
  14. {
  15. var nav = getnavtype();
  16. if (nav.indexOf("microsoft" ) >= 0)
  17.  return true;
  18. return false;
  19. }
  20. function isMOZ()
  21. {
  22. var nav = getnavtype();
  23. if (nav.indexOf("netscape" ) >= 0)
  24.  return true;
  25. return false;
  26. }
  27. function getnavtype(){
  28. appname = navigator.appName;
  29. appname = appname.toLowerCase();
  30. appversion = navigator.appVersion;
  31. appversion = appversion.toLowerCase();
  32. return appname + " " + appversion;
  33. }
  34. function test()
  35. {
  36. var scrXml = new scriptableXml(getXMLDocumentFromFrame(parent.xml_data))
  37. scrXml.findXpath = function(xpath_motif)
  38.  {
  39.    var ret = new Array();
  40.    var cnt = 0;
  41.    if (isIE())
  42.    {
  43.     var tmp = this.doc.selectNodes(xpath_motif);
  44.     for (var i=0;i<tmp.length;i++)
  45.     {
  46.      ret[cnt++] = tmp[i];
  47.     }
  48.    }
  49.    else if (isMOZ())
  50.    {
  51.     var tmp = this.doc.evaluate(xpath_motif,this.doc,null,4,null);
  52.     while (i = tmp.iterateNext())
  53.     {
  54.      ret[cnt++] = i;
  55.     }
  56.    }
  57.    return ret;
  58.  }
  59. alert(scrXml.findXpath("//type" ).length);
  60. }


 
 
fo appeler la fonction test() en supposant que celle ci se trouve sur un frame et que la frame contenant le xml s'appelle xml_data ... voilà merci bien à tous ceux qui m'auront aidé, j'espère aussi que ce script pourra servir à bcp d'entre vous qui héistent à passer leurs scripts sous mozilla,.... mozilla c un super navigateur, ya tout skia de mieux dedans!! ... ma solution se trouvait tout betement dans le site w3.org !
 
http://www.w3.org/TR/2002/WD-DOM-L [...] nding.html
 

n°291294
k666
dites non à petitmou
Posté le 21-01-2003 à 22:01:56  profilanswer
 

si ça intéresse quelqu'un je peux poster un truc plus clean :) un exemple parlant quoi!
 
voil :) :hello:
 
 
edit: en distillant un peu on peut en ressortir ça:
 

Code :
  1. var ret = new Array();
  2.           var cnt = 0;
  3.           if (isIE())
  4.           {
  5.              var tmp = objet_dom.selectNodes(xpath_motif);
  6.              for (var i=0;i<tmp.length;i++)
  7.              {
  8.                 ret[cnt++] = tmp[i];
  9.              }
  10.           }
  11.           else if (isMOZ())
  12.           {
  13.              var tmp = objet_dom.evaluate(xpath_motif,objet_dom,null,4,null);
  14.              while (i = tmp.iterateNext())
  15.              {
  16.                 ret[cnt++] = i;
  17.              }
  18.           }
  19.           return ret;


 
 
o`u ret est un tableau contenant tous les noeuds concernés par le xpath_motif donné ...


Message édité par k666 le 22-01-2003 à 00:27:25
n°291959
k666
dites non à petitmou
Posté le 22-01-2003 à 16:21:46  profilanswer
 

bon alors pour les fans de ces technologies! un lien vers un ptit moteur de recherche coté client!!!!
 
 
http://pouet.cocomatic.net/xml/index.html
 
 
suffit de mettre des expressions XPath
 
par exemple
 
/
 
ou bien  
 
//type
 
 
ou bien
 
//type[@name="CMIBlank"]
 
 
 
:)

n°293610
k666
dites non à petitmou
Posté le 24-01-2003 à 20:43:00  profilanswer
 

up ptit up :) suite à quelques améliorations!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] dom ? Xpath ? infos !![résolu!!!] merci mozilla :)

 

Sujets relatifs
[PHP] savoir si ys des reponse à 1 SQL [resolu]Plug-in Outlook MAPI : récuperer les infos d'un mail non encore envoyé
ftp - Avoir l'ip d'un Host - Pb résolu[PHP] generer des variables [resolu]
[a href & onClick] comment faire cohabiter ces deux commandes ? RESOLUBesoin d'aide, une image n'apparait pas... RESOLU
[PHP] Erreur dans MyNews v1.2 ! [Résolu]java2D avec MediaTracker , erreur difficile , aidez moi SVP !!! merci
[Java] Génération d'un document XSL en Java RESOLUActive Directory - récuperé/insérer des infos depuis un panel WEB
Plus de sujets relatifs à : [JS] dom ? Xpath ? infos !![résolu!!!] merci mozilla :)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR