getElementById ne marche pas avec mon doc XML - XML/XSL - Programmation
Marsh Posté le 03-06-2007 à 19:17:06
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"
Marsh Posté le 03-06-2007 à 19:26:08
T'es sûr que c'est pas plutôt getElementsById() ?
Et effectivement, plusieurs elements avec le même id test c'est moyen
Marsh Posté le 03-06-2007 à 19:35:10
esox_ch a écrit : T'es sûr que c'est pas plutôt getElementsById() ? |
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.
Marsh Posté le 03-06-2007 à 19:51:52
lordankou a écrit :
|
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 ?
Marsh Posté le 03-06-2007 à 20:05:27
theredled 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.
Marsh Posté le 03-06-2007 à 20:10:14
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). |
ben, tu parcours juste ton tableau retourné par getElementsByTagName en regardant les id avec getAttribute() et hop... c'est exactement ce que fait getElementById (en mieux : tu parcours pas TOUS les noeuds)
Marsh Posté le 03-06-2007 à 20:15:29
Sinon, si la compatibilité Safari 2 n'importe pas, tu peux utiliser des requêtes XPath
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 ) mais ça part ça, xpath ça déboite gravos
Marsh Posté le 03-06-2007 à 20:16:22
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.
Marsh Posté le 03-06-2007 à 20:23:22
masklinn a écrit : Sinon, si la compatibilité Safari 2 n'importe pas, tu peux utiliser des requêtes XPath |
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.
Marsh Posté le 03-06-2007 à 20:28:13
lordankou a écrit : on est informaticien donc partisant du moindre effort |
du moindre effort à long/moyen terme et pour un même résultat, voire mieux
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 (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
Marsh Posté le 03-06-2007 à 21:12:00
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
Marsh Posté le 03-06-2007 à 23:31:44
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.
Marsh Posté le 03-06-2007 à 23:45:21
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. |
Heuu firefox 1.5 et supérieur affichent très bien le SVG
Genre http://upload.wikimedia.org/wikipe [...] pectre.svg s'affiche sans problème chez moi sous FF 1.5
Marsh Posté le 04-06-2007 à 00:04:27
gaste ça marche en effet.
comme quoi mon reformatage a eu du bon
Marsh Posté le 04-06-2007 à 13:34:56
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.
Marsh Posté le 04-06-2007 à 17:54:52
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.
Marsh Posté le 05-06-2007 à 12:45:24
rx__ a écrit : Probablement parce que tu as écrit <data id="..."></data> et non <data id="..." />. |
non mon document est bien formé en tout cas je le pense :
Code :
|
et quand je fais un
Code :
|
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
Marsh Posté le 05-06-2007 à 13:00:42
lordankou a écrit : Bonjour, |
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
Marsh Posté le 05-06-2007 à 13:07:25
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 |
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 . 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...
Marsh Posté le 05-06-2007 à 13:17:18
lordankou a écrit : d'après ce que j'ai pu lire il considère la tabulation comme un texte . voir pire un saut de ligne est considéré comme un élément texte. |
C'est pourtant parfaitement normal 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...
Marsh Posté le 05-06-2007 à 13:23:41
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 !)
Marsh Posté le 05-06-2007 à 13:35:06
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
Marsh Posté le 05-06-2007 à 14:13:31
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. |
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).
Marsh Posté le 05-06-2007 à 14:23:55
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é.
Marsh Posté le 05-06-2007 à 14:42:48
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.
Marsh Posté le 05-06-2007 à 18:42:30
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.
Marsh Posté le 05-06-2007 à 18:54:02
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.
Marsh Posté le 05-06-2007 à 19:00:43
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) ..."
Marsh Posté le 03-06-2007 à 19:10:30
Bonjour,
je voudrais savoir si le getElementById marche en javascript avec du xml ?
je m'explique :
j'ai un document xml simple :
et je voudrais récupérer tous les élements ayant l'id = "testt".
j'ai donc appliqué le code suivant :
en faisant un alert(myVars) il me ressort null.
si je fais :
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