2010-04-20 10 views
0

Je tourne mes roues sur ce sujet. Comment puis-je obtenir les valeurs des éléments imbriqués suivants du XML ci-dessous (j'ai aussi mis mon code ci-dessous)? Je suis après la valeur "descShort", puis la capitale "Last" et le capital "changement":JQuery utilisateur pour obtenir des éléments imbriqués à partir de XML

<indices> 
<index> 
    <code>DJI</code> 
    <exchange>NYSE</exchange> 
    <liveness>DELAYED</liveness> 
    <indexDesc> 
     <desc>Dow Jones Industrials</desc> 
     <descAbbrev>DOW JONES</descAbbrev> 
     <descShort>DOW JONES</descShort> 
     <firstActive></firstActive> 
     <lastActive></lastActive> 
    </indexDesc> 
    <indexQuote> 
     <capital> 
      <first>11144.57</first> 
      <high>11153.79</high> 
      <low>10973.92</low> 
      <last>11018.66</last> 
      <change>-125.9</change> 
      <pctChange>-1.1%</pctChange> 
     </capital> 
     <gross> 
      <first>11144.57</first> 
      <high>11153.79</high> 
      <low>10973.92</low> 
      <last>11018.66</last> 
      <change>-125.9</change> 
      <pctChange>-1.1%</pctChange> 
     </gross> 
     <totalEvents>4</totalEvents> 
     <lastChanged>16-Apr-2010 16:03:00</lastChanged> 
    </indexQuote> 
</index> 
<index> 
    <code>XAO</code> 
    <exchange>ASX</exchange> 
    <liveness>DELAYED</liveness> 
    <indexDesc> 
     <desc>ASX All Ordinaries</desc> 
     <descAbbrev>All Ordinaries</descAbbrev> 
     <descShort>ALL ORDS</descShort> 
     <firstActive>06-Mar-1970</firstActive> 
     <lastActive></lastActive> 
    </indexDesc> 
    <indexQuote> 
     <capital> 
      <first>5007.30</first> 
      <high>5007.30</high> 
      <low>4934.00</low> 
      <last>4939.40</last> 
      <change>-67.9</change> 
      <pctChange>-1.4%</pctChange> 
     </capital> 
     <gross> 
      <first>5007.30</first> 
      <high>5007.30</high> 
      <low>4934.00</low> 
      <last>4939.40</last> 
      <change>-67.9</change> 
      <pctChange>-1.4%</pctChange> 
     </gross> 
     <totalEvents>997</totalEvents> 
     <lastChanged>19-Apr-2010 17:02:54</lastChanged> 
    </indexQuote> 
</index> 

$.ajax({ 
      type: "GET", 
      url: "stockindices.xml", 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find('index').each(function(){ 

        var self = $(this);      
        var code = self.find('indexDesc'); 

        $(code).find('indexDesc').each(function(){ 
         alert(self.find('descShort').text()); 
        });      

        $('<span class=\"tickerItem\"></span>').html(values[0].text()).appendTo('#marq');                 
       }); 
      } 
     }); 
+0

Le fantôme vers le bas frappe à nouveau des électeurs –

+0

Il a demandé (presque) la même question hier: http://stackoverflow.com/questions/2669556/get-nested-item-from-xml-with-jquery – Matt

+0

désolé. Je n'ai pas pu éditer le titre dans la question précédente. et je ne suis pas un il :) – Dkong

Répondre

2

Vous avez quelques failles dans votre fonction. Cela devrait le faire:

success: function(xml) { 
    $(xml).find('index').each(function(){ 

     var value = $(this).find('indexDesc descShort').text(); 
     value += ' ' + $(this).find('indexQuote capital last').text(); 
     value += ' ' + $(this).find('indexQuote capital change').text(); 

     $('<span class="tickerItem"></span>').text(value).appendTo('#marq'); 
    }); 
} 

Deux commentaires sur votre code:

var code = self.find('indexDesc'); 

$(code).find('indexDesc').each(function(){ 
     alert(self.find('descShort').text()); 
}); 

Ici vous assignez l'élément indexDesc à la variable code et plus tard, vous essayez de trouver l'élément indexDesc intérieur indexDesc (qui n'existe pas).

$('<span class=\"tickerItem\"></span>').html(values[0].text()) 

Je me demande vraiment où values vient, il est jamais déclaré. Et vous n'avez pas besoin d'échapper les guillemets doubles entre guillemets simples.


Je vous recommande vraiment lire le documentation et un tutorial pour obtenir les bases de jQuery.

+0

Salut Felix. Merci pour votre perspicacité. Très appréciée. – Dkong

+0

Felix, je viens de le tester et je remarque que la partie qui récupère le 'indexDesc descShort' revient vide pour une raison quelconque. Très étrange. – Dkong

+0

@Dkong: Mmh je ne sais pas. Basé sur le document XML que vous montrez, cela devrait fonctionner. –

0
success: function(xml) { 
    $(xml).find('index indexDesc descShort').each(function(){      

    $('<span class=\"tickerItem\"></span>').html($(this).text()).appendTo('#marq');                 
    }); 
} 

deuxième a demandé par exemple (ce qui est le plus facile à lire, une optimisation possible)

success: function(xml) { 
    $(xml).find('index').each(function(){      

    var desc = $('indexDesc descShort', this).text(); 
    var last = $('indexQuote capital last', this).text(); 
    var change = $('indexQuote capital change', this).text(); 

    //Do whatever with the text values                 
    }); 
} 
+0

Salut, merci. J'espérais également obtenir la valeur pour: 'index indexQuote capital last'. Est-ce que je peux faire ceci d'une façon ou d'une autre de sorte que tout soit fait en une itération avec la valeur descShort que vous m'avez fournie? – Dkong

+0

Je vais ajouter cet exemple –

+0

merci James. Pour une raison quelconque (en utilisant le code ci-dessus et le code XML, et même après l'avoir vérifié), le texte 'indexDesc descShort' revient vide (certainement pas de fautes de frappe). Bizzaro – Dkong