Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer élément href d'une balise xml

Sujet résolu
Anonyme
    25 octobre 2011 à 21:48:09

    Bonjour,

    J'ai ce document XML :
    <tracks xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.spotify.com/ns/music/1">
    <opensearch:Query role="request" startPage="1" searchTerms="coldplay paradise"/>
    <opensearch:totalResults>23</opensearch:totalResults>
    <opensearch:startIndex>0</opensearch:startIndex>
    <opensearch:itemsPerPage>100</opensearch:itemsPerPage>
    	<track href="spotify:track:0jyrWT10eSCr1ssoYOPnoJ">
    	<name>Paradise (Acoustic Version)</name>
    	<artist href="spotify:artist:364ovD0MRp9ezaNTkRoLeA">
    	<name>Gavin Mikhail</name>
    	</artist>
    	<id type="isrc">TCABA1158483</id>
    		<album href="spotify:album:6Q5knXB0PULEoBlrDqkEXy">
    		<name>Paradise (Coldplay Acoustic Sessions Tribute)</name>
    		<released>2011</released>
    		<availability>
    		<territories>
    		AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IN IO IQ IR IS IT JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ZZ
    		</territories>
    		</availability>
    		</album>
    	<track-number>2</track-number>
    	<length>270.303000</length>
    	<popularity>0.57135</popularity>
    	</track>
    	<track href="spotify:track:59uhJxS99VgU4YsnjgKPBu">
    	<name>
    	Paradise (Tribute To Coldplay) Performed By Cover Nation
    	</name>
    	<artist href="spotify:artist:33if7oJ2puDFSHi1Qv8zpp">
    	<name>Cover Nation</name>
    	</artist>
    	<id type="isrc">TCABA1122679</id>
    		<album href="spotify:album:6kAuqfy6mxUpNol1X7pibX">
    		<name>
    		Paradise (Tribute To Coldplay) Performed By Cover Nation - Single
    		</name>
    		<released>2011</released>
    		<availability>
    		<territories>
    		AD AE AF AG AI AL AM AN AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BM BN BO BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IN IO IQ IR IS IT JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SV SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW ZZ
    		</territories>
    		</availability>
    		</album>
    	<track-number>1</track-number>
    	<length>278.832000</length>
    	<popularity>0.52658</popularity>
    	</track>
    </tracks>
    


    Mon problème est que je ne sais pas comment récupérer l'attribut href de la balise track.
    C'est un fichier qui provient de l'API de spotify.
    Merci à ceux qui sauront m'aider. :)
    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2011 à 21:59:20

      Côté JavaScript
      Tu as la méthode indexOf et substring, quelques exemples :
      var track=contenu_xml.indexOf('<track');
      var href=contenu_xml.indexOf('href=',track);
      var texte_a_partir_du_href=contenu_xml.substring(href);
      



      Côté PHP (et/ou AJAX)
      Tu as plusieurs solutions, soit utiliser le parser XML de PHP :
      http://www.php.net/manual/fr/book.xmlreader.php

      Tu peux aussi utiliser les expressions régulières :
      http://www.php.net/manual/fr/function.preg-match.php

      Ou encore la fonction strpos :
      http://www.php.net/manual/fr/function.strpos.php
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        25 octobre 2011 à 22:13:00

        Merci pour ta réponse. Lorsque je remplace ta variable contenu_xml par la mienne qui est issu d'un responseText j'obtient une erreur, car on ne peut apparemment pas utiliser indexOf. Ce qui souléve un autre de mes probléme.
        Voici comment je fait pour parcourir un fichier xml (dans ce cas je traite que le premier resultat donc je ne fait pas de boucle :
        var xhr4 = getXMLHttpRequest();
        artist = artist.replace(new RegExp(' ','g'),'+');
        name = name.replace(new RegExp(' ','g'),'+');
        schema2 = "http://ws.spotify.com/search/1/track?q="+name+"+"+artist;
        xhr4.open("GET", schema2, false);
        xhr4.onreadystatechange=function() {
        	if (xhr4.readyState == 4) 
        	{
        		if (xhr4.status != 404) 
        		{
        		var data2=xhr4.responseXML;
        		var tracks2 = data2.getElementsByTagName('track');
        		document.getElementById("lastfm-chart").innerHTML += tracks2[1].getElementsByTagName('name')[1].firstChild.data +'<br />';
        		
        		var track=data2.indexOf('<track');
        		var href=data2.indexOf('href=',track);
        		var texte_a_partir_du_href=contenu_xml.substring(href);
        		alert(texte_a_partir_du_href);
        		}
        	}
        
        }
        xhr4.send(null);
        

        En plus de ma question précédente, ne peut-on pas parcourir un fichier XML sans passer par XMLhttpRequest ?
        Merci :)
        • Partager sur Facebook
        • Partager sur Twitter
          25 octobre 2011 à 22:16:24

          Tu peux pas faire indexOf sur xhr4.responseXML mais tu peux le faire sur xhr4.responseText, attention à la nuance.

          Par contre, fallait le préciser avec un xhr4.responseXML, tu peux extraire les élément du DOM normalement :
          var href = xhr4.responseXML.getElementsByTagName('track')[0].getAttribute('href');
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            25 octobre 2011 à 22:24:06

            Ok, ça fonctionne pour les 2 !
            Je ne connais pas tellement le DOM, donc pour accéder au élément c'est galère pour trouver, mais c'est tellement plus pratique que de bricoler.
            Merci Kyle !
            • Partager sur Facebook
            • Partager sur Twitter

            Récupérer élément href d'une balise xml

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown