Extraire donné XML

Extraire donné XML - HTML/CSS - Programmation

Marsh Posté le 19-12-2008 à 11:42:49    

Bonjour, j'ai un serveur MapGuide OS, je réucpére un xml de ce genre :
 
<FeatureInfoCollection>
   <FeatureInfo layer="Samples/Sheboygan/Layers/Parcels">
      <Property name="Description1" value="SEC 22 T15N R23E"/>
      <Property name="Zone" value="RES"/>
      <Property name="Acreage" value="0.29"/>
      <Property name="Lot Dimensions" value="60X211"/>
      <Property name="Owner" value="LEMKE, JOSHUA & EMIL"/>
      <Property name="Description2" value="PRT NW 1/4 SW 1/4 COM IN E"/>
      <Property name="Description3" value="LN OF N EVANS ST 797.3' S OF"/>
      <Property name="Billing Address" value="639 N EVANS ST"/>
      <Property name="Lot Size (SqFt)" value="12660"/>
      <Property name="Description4" value="ITS INTERSECTION WITH S LN"/>
   </FeatureInfo>
</FeatureInfoCollection>
 
Je voudrais récupéré la valeur du name="Zone"
 
J'ai essayé deux syntaxe mais sans succé

Code :
  1. var doce = response.responseXML.documentElement;
  2. var PCode = doce.getElementsByTagName('Property')[1].value;


Code :
  1. var doce = response.responseXML.documentElement;
  2. var PCode = doce.getElementsByTagName('Zone').data;


Code :
  1. var doce = response.responseXML.documentElement;
  2. var PCode = doce.getElementsByName('Zone').value;


 
Quand je fais un alert de "doce", il m'affiche [Object Elment]
 
Merci d'avance


---------------

Reply

Marsh Posté le 19-12-2008 à 11:42:49   

Reply

Marsh Posté le 19-12-2008 à 12:25:26    

Heureusement que doce est un Objet [:petrus75]


Message édité par FlorentG le 19-12-2008 à 12:25:32
Reply

Marsh Posté le 19-12-2008 à 12:30:06    

comment savoir se qu'il y a dedans?


---------------

Reply

Marsh Posté le 19-12-2008 à 12:33:39    

Via FireBug par exemple, met un espion dessus pour voir les différentes propriétés. Et la référence de l'API DOM

Reply

Marsh Posté le 19-12-2008 à 12:37:24    

A savoir que quand tu parcourt un object xml en javascript si je me souviens viens tu dois parcourir les parents avant les enfants
 
essaye :

Code :
  1. var doce = response.responseXML.documentElement;
  2.    var PCode = doce.FeatureInfoCollection.etc ...


sinon utilise firebug pour parcourir les objects et donc voir ceux qu'il contient a chaque niveau


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 19-12-2008 à 17:41:20    

bon voici une impression d'ecran de la variable "doce"
 
http://img517.imageshack.us/img517/5342/impij0.th.jpg
 
l'erreur est :
 

Code :
  1. doce.featureinfocollection is undefined
  2. [Break on this error] var xmlrecu = doce.featureinfocollection.value;


 
le code :

Code :
  1. var doce = response.responseXML.documentElement;
  2. //var PCode = doce.getElementsByTagName('Property')[1].value;
  3. var xmlrecu = doce.featureinfocollection.value;


 
je comprend pas pourquoi il ne trouve pas featureinfocollection


---------------

Reply

Marsh Posté le 19-12-2008 à 18:46:52    

On n'accède pas au éléments comme ça (doce.featureinfocollection), ce n'est pas comme l'API DOM HTML qui définit ce genre de propriétés. Il faut utiliser getElementsByTagName et ce genre de trucs.
 
Et featureinfocollection n'est pas enfant de doce, c'est doce... documentElement est l'élément racine

Reply

Marsh Posté le 19-12-2008 à 20:38:12    

Exact ...
De plus, je pense que tu ne t'es pas bien documenté sur le XML et les méthodes d'accès aux noeuds et leurs propriétés ! :-/
 
Dans ton XML, tu as bien 10 noeuds "Property" ... mais aucun n'a de "value" !
La "value" d'un noeud comme tu tentes de l'accéder est, platement, ce qui se trouve entre les <> </> !
Hors, là, tu vois bien qu'il n'y a rien ! ( <  /> )
 
Donc déjà, ça,

Code :
  1. var PCode = doce.getElementsByTagName('Property')[1].value;


.. tu oublies vite fait ! ( et de toute façon, ça serait même le cas, ça serait nodeValue et pas juste value ! )
 
Par contre, ces 10 noeuds possèdent tous 2 propriétés; name et value.
 
Ensuite, faire ".getElementsByTagName('Property')[1]" pour visiblement accéder directement au noeud dont la propriété "name" = "Zone" est une TRES mauvaise idée !
En effet, si un jour tu rajoutes ou si le service fournissant ce XML rajoute le moindre noeud au dessus de ce dernier, tu es foutu, tu seras bon à rechercher et remplacer dans toutes tes sources le [1] par le nouveau numéro de noeud !
 
Bon .. en gros ( je vais rien faire pour toi, je vais juste te mettre sur la piste ) :

Code :
  1. var PCode = doce.getElementsByTagName('Property');


Ca, c'est ok, ça te retourne un tableau des noeuds "Property" ( en supposant que "doce" soit le bon noeud racine )
Ensuite, tu fais une boucle dans laquelle tu vas analyser chaque élément de ce tableau pour chercher celui qui t'intéresse.
L'accès à des attributs de noeud se fait par la méthode .getAttribute('nom_attribut')

Code :
  1. boucle {
  2. si PCode[index].getAttribute('name') égal "Zone" alors {
  3.   // tu as le noeud qu'il te faut et tu peux traiter la valeur
  4.   PCode[index].getAttribute('value')
  5. }
  6. }


 
Essaye déjà ça ...


Message édité par Mr Mala le 19-12-2008 à 20:39:23
Reply

Marsh Posté le 20-12-2008 à 22:46:04    

Mr Mala  et FlorentG et ionik, merci merci  :pt1cable:  
 
Je teste cela des lundi, franchement super explication  :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed