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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  getElementById ne marche pas avec mon doc XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

getElementById ne marche pas avec mon doc XML

n°1569336
lordankou
Posté le 03-06-2007 à 19:10:30  profilanswer
 

Bonjour,
 
je voudrais savoir si le getElementById marche en javascript avec du xml ?
 
je m'explique :
j'ai un document xml simple :

Code :
  1. <test id="testt">
  2. <data id="truc"></data>
  3. </test>


 
et je voudrais récupérer tous les élements ayant l'id = "testt".
 
j'ai donc appliqué le code suivant :
 

Code :
  1. myVars = xmlDoc.getElementById('testt');


en faisant un alert(myVars) il me ressort null.
 
si je fais :

Code :
  1. alert(xmlDoc.childNodes.item(0).getAttribute("id" ));


 
il m'affiche bien "testt"
par conséquent il charge bien le document xml mais il n'arrive pas à faire une recherche par id.
quelqu'un aurait une idée ?  
 
Merci

mood
Publicité
Posté le 03-06-2007 à 19:10:30  profilanswer
 

n°1569337
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2007 à 19:17:06  profilanswer
 

lordankou a écrit :

et je voudrais récupérer tous les élements ayant l'id = "testt".


Tu veux dire que tu as plusieurs éléments avec le même id "testt" [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1569338
esox_ch
Posté le 03-06-2007 à 19:26:08  profilanswer
 

T'es sûr que c'est pas plutôt getElementsById() ?
 
Et effectivement, plusieurs elements avec le même id test c'est moyen :heink:

Message cité 1 fois
Message édité par esox_ch le 03-06-2007 à 19:26:27

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1569339
lordankou
Posté le 03-06-2007 à 19:26:21  profilanswer
 

oui voilà (fait pas cette tête je sais ce que je fais).

n°1569342
lordankou
Posté le 03-06-2007 à 19:35:10  profilanswer
 

esox_ch a écrit :

T'es sûr que c'est pas plutôt getElementsById() ?
 
Et effectivement, plusieurs elements avec le même id test c'est moyen :heink:


 
oui j'ai déjà essayé et c'est pas ça :
message: Statement on line 118: Type mismatch (usually a non-object value used where an object is required)
 
 
et je sais que c'est moyen mais c'est la façon la plus simple que j'ai trouvé pour faire ce que j'ai besoin de faire.

n°1569347
theredled
● REC
Posté le 03-06-2007 à 19:51:52  profilanswer
 

lordankou a écrit :


et je voudrais récupérer tous les élements ayant l'id = "testt".


getElementById n'est pas sensé retourner un tableau hein on est d'accord ?

 

Sinon l'"id" ça veut rien dire dans un XML, donc ce serait pas étonnant que ça marche pas...
D'ailleurs le vrai nom de la fonction c'est bien window.document.getElementById() ;)

 

Tu peux pas utiliser getElementsByTagName ?

Message cité 1 fois
Message édité par theredled le 03-06-2007 à 19:53:22

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1569350
lordankou
Posté le 03-06-2007 à 20:05:27  profilanswer
 

theredled a écrit :


Tu peux pas utiliser getElementsByTagName ?


 
c'est pas l'envi qui m'en manque mais je reçois un fichier qui est découpé d'une façon qui ne permet pas d'utiliser de façon très efficace le getElementsByTagName (il retournerait beaucoup trop d'éléments).
je vais essayer de trouver un mix entre le getElementsByTagName et parcouris tout une nodelist pour trouver le bon élément.

n°1569353
theredled
● REC
Posté le 03-06-2007 à 20:10:14  profilanswer
 

lordankou a écrit :

c'est pas l'envi qui m'en manque mais je reçois un fichier qui est découpé d'une façon qui ne permet pas d'utiliser de façon très efficace le getElementsByTagName (il retournerait beaucoup trop d'éléments).
je vais essayer de trouver un mix entre le getElementsByTagName et parcouris tout une nodelist pour trouver le bon élément.


ben, tu parcours juste ton tableau retourné par getElementsByTagName en regardant les id avec getAttribute() et hop... c'est exactement ce que fait getElementById  [:airforceone]  (en mieux : tu parcours pas TOUS les noeuds)


Message édité par theredled le 03-06-2007 à 20:11:04

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1569354
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2007 à 20:15:29  profilanswer
 

Sinon, si la compatibilité Safari 2 n'importe pas, tu peux utiliser des requêtes XPath :o
 
C'est pas idéal vu que IE et [tous les autres] implémentent les requester XPath (et que sous IE ça ne fonctionne que sur une source XML, pas sur du HTML :o) mais ça part ça, xpath ça déboite gravos :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1569355
lordankou
Posté le 03-06-2007 à 20:16:22  profilanswer
 

oué mais ça m'évitait d'avoir à le programmer (on est informaticien donc partisant du moindre effort). de toute façon je viens de remarquer que en effet je dois parcourir toutes les valeurs pour calculer le min, le max et la moyenne.  
des fois je regrette une bonne base de donnée qui fera ça beaucoup plus facilement.

mood
Publicité
Posté le 03-06-2007 à 20:16:22  profilanswer
 

n°1569359
lordankou
Posté le 03-06-2007 à 20:23:22  profilanswer
 

masklinn a écrit :

Sinon, si la compatibilité Safari 2 n'importe pas, tu peux utiliser des requêtes XPath :o
 
C'est pas idéal vu que IE et [tous les autres] implémentent les requester XPath (et que sous IE ça ne fonctionne que sur une source XML, pas sur du HTML :o) mais ça part ça, xpath ça déboite gravos :o


 
j'avais déjà regardé mais si je me rappelle bien ça pose des problèmes quand c'est utilisé à l'intérieur d'un fichier svg ce qui est mon cas.

n°1569362
theredled
● REC
Posté le 03-06-2007 à 20:28:13  profilanswer
 

lordankou a écrit :

on est informaticien donc partisant du moindre effort


du moindre effort à long/moyen terme [:aloy] et pour un même résultat, voire mieux :o

 

le moindre effort à court terme c'est copier-coller, le moindre effort à long terme c'est prendre 10 min pour faire une fonction qui te servira pour le reste de ta vie/projet :o (et t'épargnera des heures au bout du compte)
En l'occurence j'y connait keud en XSL mais moi je ferais comme dit Masklinn, ça te servira pour plus tard [:ojap]


Message édité par theredled le 03-06-2007 à 20:32:20

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1569368
lordankou
Posté le 03-06-2007 à 21:12:00  profilanswer
 

oui je le sais bien. il ne faut pas forcément prendre tout ce que je dis au pied de la lettre.  
je suis le premier à dire qu'il faut avant tout unebonne analyse pour faire un bon projet mais dans une entreprise ou l'informatique est juste un outil on est hélas de faire l'impasse sur pas malde chose pour produire un truc qui marche mais qui est bancale. mais bon tant qu'on est pas le big boss on peut pas décider

n°1569392
HouseMD
Posté le 03-06-2007 à 22:56:49  profilanswer
 

xml + javascript = e4x

n°1569401
lordankou
Posté le 03-06-2007 à 23:31:44  profilanswer
 

HouseMD a écrit :

xml + javascript = e4x


 
dommage que ça ne marche pas sous opera et ie les deux seuls navigateurs affichant correctement du SVG ce qui est la base de mon projet.  :D

n°1569404
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2007 à 23:45:21  profilanswer
 

lordankou a écrit :

dommage que ça ne marche pas sous opera et ie les deux seuls navigateurs affichant correctement du SVG ce qui est la base de mon projet.  :D


Heuu firefox 1.5 et supérieur affichent très bien le SVG [:pingouino]
 
Genre http://upload.wikimedia.org/wikipe [...] pectre.svg s'affiche sans problème chez moi sous FF 1.5 [:dawak]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1569408
lordankou
Posté le 04-06-2007 à 00:04:27  profilanswer
 

gaste ça marche en effet.  
comme quoi mon reformatage a eu du bon :D

n°1569636
lordankou
Posté le 04-06-2007 à 13:34:56  profilanswer
 

j'aurai une autre question :
savez vous pourquoi pour chaque élément de mon fichier xml j'ai un élément "texte" vide ?  
j'ai déjà remarqué ce problème et je comprends vraiment pas pourquoi il va doubler tous mes éléments.

n°1569954
rx__
Paint It Black
Posté le 04-06-2007 à 17:54:52  profilanswer
 

Probablement parce que tu as écrit <data id="..."></data> et non <data id="..." />.
Tu peux normalement le faire disparaître avec un normalize() sur le root de ton document.

n°1570269
lordankou
Posté le 05-06-2007 à 12:45:24  profilanswer
 

rx__ a écrit :

Probablement parce que tu as écrit <data id="..."></data> et non <data id="..." />.
Tu peux normalement le faire disparaître avec un normalize() sur le root de ton document.


 
 
non mon document est bien formé en tout cas je le pense :
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
  3. <svg>
  4. <svg viewBox="22552.5 -470741.6 339552.5 461931.6"/>
  5. <svg viewBox="259302.4 -187290.5 42404.6 53380.6"/>
  6. <svg viewBox="36875.8 -457099 301309.1 441210.4"/>
  7. </svg>


 
et quand je fais un  

Code :
  1. var personIterator = svgDoc.evaluate('//svg', svgDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null );
  2. alert(personIterator.singleNodeValue.childNodes.length);


 
il me sort 7 c'est à dire mes 4 svg + 3 element texte qui sont vides
par contre opera lui me ressort le bon nombre  :(

n°1570280
FlorentG
Unité de Masse
Posté le 05-06-2007 à 13:00:42  profilanswer
 

lordankou a écrit :

Bonjour,
 
je voudrais savoir si le getElementById marche en javascript avec du xml ?


 
La méthode getElementById du DOM récupère un élément dont un attribut est de type ID. Ca se renseigne dans la DTD, et faut obligatoirement valider le doc avec la DTD donc, ce qui est impossible en JS :(
 
On peut très bien définir un attribut 'pouet', lui donner le type ID dans la DTD, et getElementById renverra l'élément dont l'attribut 'pouet' est égal à la valeur transmise. Ca n'a donc rien à voir avec le nom de l'attribut.
 
C'est évidemment complètement relou :D

n°1570289
lordankou
Posté le 05-06-2007 à 13:07:25  profilanswer
 

FlorentG a écrit :

La méthode getElementById du DOM récupère un élément dont un attribut est de type ID. Ca se renseigne dans la DTD, et faut obligatoirement valider le doc avec la DTD donc, ce qui est impossible en JS :(
 
On peut très bien définir un attribut 'pouet', lui donner le type ID dans la DTD, et getElementById renverra l'élément dont l'attribut 'pouet' est égal à la valeur transmise. Ca n'a donc rien à voir avec le nom de l'attribut.
 
C'est évidemment complètement relou :D


 
merci en fait j'ai trouvé plus ou moins un moyen contourné donc ça maismaintenant le plus gros problème vient de l'interprétation stupide du moteur gecko avec le xml (comme je l'ai expliqué au dessus).
d'après ce que j'ai pu lire il considère la tabulation comme un texte  :ouch: . voir pire un saut de ligne est considéré comme un élément texte. on se retrouve donc à être obliger de faire des codes non indenter ce qui est impossible dans certains cas.
bref là je suis un peu perdu... soit je dis "les utilisateurs de firefox vous devez utiliser un navigateur logique" soit je me pends...

n°1570299
FlorentG
Unité de Masse
Posté le 05-06-2007 à 13:17:18  profilanswer
 

lordankou a écrit :

d'après ce que j'ai pu lire il considère la tabulation comme un texte  :ouch: . voir pire un saut de ligne est considéré comme un élément texte.


C'est pourtant parfaitement normal :D C'est voulu par la recommendation XML. Certaines librairies, comme la libxml permettent de supprimer tout espace blanc en trop lors de l'ouverture (je sais pas si c'est possible sous Gecko). C'est aussi quelque chose qu'on peut renseigner dans un schéma XML (on peut y faire plus de trucs que dans une DTD, mais le problème reste le même, faut valider, impossibilité, etc etc).
 
 
Donc là en gros t'es cuit : pas de getElementById, faut contourner. Et les textes vides (espaces, tabulations et retours chariots) considérés comme nodes textes. Faut aussi contourner...

n°1570302
lordankou
Posté le 05-06-2007 à 13:23:41  profilanswer
 

bon je vais pas faire mon fénéant en utilisant comme contournement : "utilisez opéra" et je vais me coltiner cette abération conforme aux standards.
en regardant sur différents j'ai constaté que je ne suis pas le seul à trouver ça totalement stupide. à la limite la tabulation ou l'espace ok mais le retour chariot...
enfin bon au boulot (comme si j'avais pas déjà assez à faire !)

n°1570306
FlorentG
Unité de Masse
Posté le 05-06-2007 à 13:35:06  profilanswer
 

Comme dit, y'a plein de mécanisme pour changer le comportement par défaut, malheureusement ce n'est pas supporté par tout le monde :( Et c'est souvent source de performances en baisse, de conso mémoire en plus, et de temps de développements rallongés.
 
Dans un monde idéal, ton XML serait accompagné d'un XML-Schema, qui renseignerait sur la structure valide du document, quels attributs sont de type ID, et à quels éléments faut-il enlever les espaces blancs :)

n°1570323
lordankou
Posté le 05-06-2007 à 14:13:31  profilanswer
 

FlorentG a écrit :

Comme dit, y'a plein de mécanisme pour changer le comportement par défaut, malheureusement ce n'est pas supporté par tout le monde :( Et c'est souvent source de performances en baisse, de conso mémoire en plus, et de temps de développements rallongés.
 
Dans un monde idéal, ton XML serait accompagné d'un XML-Schema, qui renseignerait sur la structure valide du document, quels attributs sont de type ID, et à quels éléments faut-il enlever les espaces blancs :)


 
je dirais que le pire c'est quand on mixe plusieurs normes. dans mon casje dois mixer du svg avec du xml et le traitement sous firefox devient un vrai calvaire.
je regrette le temps ou il y avait qu'un seul navigateur. (et oui on pouvait optimiser le code ce qui est maintenant impossible, déjà que faire marcher un truc compliqué sur3 navigateurs relèvent du miracle).

n°1570327
rx__
Paint It Black
Posté le 05-06-2007 à 14:23:55  profilanswer
 

Justement, est-ce que le normalize() n'agirait pas aussi sur les tabulations?
La doc de Gecko dit

Citation :

Puts the specified node and all of its subtree into a "normalized" form. In a normalized subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.


donc j'aurais tendance à dire que normaliser un texte contenant uniquement des tabulations revient à l'enlever, mais je n'ai pas testé.

n°1570337
lordankou
Posté le 05-06-2007 à 14:42:48  profilanswer
 

j'ai essayé et je n'ai vu aucune différence du moins sur les retour chariots qui sont vraiment le plus gros problème. autant les gens en générals n'indentent pas toujours autant les retours chariot sont presque toujours utilisés.  

n°1570532
rx__
Paint It Black
Posté le 05-06-2007 à 18:42:30  profilanswer
 

Effectivement, je viens de faire un test et la normalisation ramène plusieurs tabulations à un seul espace. Mais ça c'est pas très intéressant...
Cela dit que veux-tu faire exactement? En général on ne s'intéresse pas à ce qu'il y a entre les éléments, mais au contenu d'éléments bien définis où le texte à un sens.

n°1570537
lordankou
Posté le 05-06-2007 à 18:54:02  profilanswer
 

j'ai réussi à récupérer le coup en faisant en test de navigateur.
le problème dans mon cas c'est que je voulais récupérer des attributs d'éléments. donc je bouclais sur mes éléments qui devaient être toutes des viewbox et non des viewbox et des textbox. par conséquent à un moment donné il cherchait un attribut d'un textbox pensant que c'était un viewbox.  
salloperie navigateur va.

n°1570540
rx__
Paint It Black
Posté le 05-06-2007 à 19:00:43  profilanswer
 

Il ne faut pas oublier que dans un document XML il y a aussi des commentaires, des instructions de traitement, etc.
Donc si tu veux être sûr de ne regarder que les éléments, tu peux faire un "if (e instanceof Element) ..."

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  getElementById ne marche pas avec mon doc XML

 

Sujets relatifs
getElementById et div imbriqués[RESOLU]Array et fonction max qui ne marche pas ...
[PHP/MYSQL] pourquoi ce script marche pas ?Les chaînes éditoriales XML
[Access 2000 et SQL] Count, Group by et Sort => le sort ne marche pasLecture Flux RSS/XML
Bug Menu IE 6 (marche sous FF et IE7)Sujet : Que signifie le signe % sous XML ?
[Resolu] [XEmacs] Controle-Espace ne marche pasBlabla@Programmation !! Y marche c'ui là (en attendant mieux)
Plus de sujets relatifs à : getElementById ne marche pas avec mon doc XML


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