2012-03-27 34 views
0

Ich arbeite an einem Javascript-Projekt, das die Analyse von XML-Daten beinhaltet. Ich habe eine XML-Datei mit der folgenden Struktur:Parsing verschachtelte XML mit JQuery

<?xml version="1.0" encoding="utf-8"?> 
<newsmodule> 
    <year name="2012"> 
     <news> 
     <date>Jan 01</date> 
     <title>title 1</title> 
     <info>info 1</info> 
    </news> 
    <news> 
     <date>Jan 02</date> 
     <title>title 2</title> 
     <info>info 2</info> 
    </news> 
</year> 
<year name="2011"> 
    <news> 
     <date>Jan 03</date> 
     <title>title 3</title> 
     <info>info 3</info> 
    </news> 
    <news> 
     <date>Jan 04</date> 
     <title>title 4</title> 
     <info>info 4</info> 
    </news> 
</year> 

Ich brauche jeden Tag für das Jahr 2012 in Array zu schreiben. Ich habe den folgenden Code:

$(xml).find("year").each(function() { 

... 

$(xml).find("news").each(function() { 
    dates.push($(this).find("date").text()); 
    titles.push($(this).find("title").text()); 
    infos.push($(this).find("info").text()); 
}); 

Und aus dem offensichtlichen Grund, warum ich habe Daten für alle Jahre in der gleichen Reihe bekam.

Gibt es eine Möglichkeit, dies zum Laufen zu bringen? Ich kann die XML-Datei nicht ändern.

+0

Würde eine Funktion, die XML in JSON konvertiert, Ihnen helfen, dieses Problem zu lösen? –

Antwort

1

Sie jQuery nicht DOM-Traversal-Methoden verwenden, um durch die XML zu durchqueren, die abhängig sehr Browser verwendet wird parseXML, auch wenn genau das ist das xml, die Sie gebucht haben, die fehlerhaft ist, gibt es keine Endung </newsmodule>

var xml='<newsmodule> 
    <year name="2012"> 
     <news> 
     <date>Jan 01</date> 
     <title>title 1</title> 
     <info>info 1</info> 
    </news> 
    <news> 
     <date>Jan 02</date> 
     <title>title 2</title> 
     <info>info 2</info> 
    </news> 
</year> 
<year name="2011"><news> 
     <date>Jan 03</date> 
     <title>title 3</title> 
     <info>info 3</info> 
    </news> 
    <news> 
     <date>Jan 04</date> 
     <title>title 4</title> 
     <info>info 4</info> 
    </news> 
</year></newsmodule>'; 


    xmlDoc = $.parseXML(xml), 
    $xml = $(xmlDoc), 
    $title = $xml.find("year[name='2012']"); 

$("body").append($($title).find("date").text()); 

DEMO

+0

http://jsfiddle.net/HXLk4/24/ – Rafay