# jquery xml-dateien einlesen alle 20 sekunden.



## Webesek (20. November 2012)

Hi Leute ich möchte mittels jquery eine xml Datei alle 20 Sekunden auslesen.
Habe das Problem das ich die komplette xml datei ausgegeben bekomme, aber nur ein bestimmten Bereich haben will.
Das nächste wäre das die Datei sich alle 20 Sekunden ändert und ich es in einer Intervall packen will.
Hat jemand ne Lösung für mich..?

wäre wirklich sehr dankbar..

Meine aktuellen Dateien :


Index

```
<!DOCTYPE html>
<html>
<head>
   <title>XML AUSLESEN</title>
   <meta charset="UTF-8">
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
   
   <script type="text/javascript">
 
   $(document).ready(function(h1)
   {
 
        $.get("song.xsl", function(XMLmediaArray){
        $(XMLmediaArray).find("mount").each(function(){
        var $myMedia = $(this);
        var song = $myMedia.find("song").text();
        var stream = $myMedia.find("stream").text();
        $("#mediaContainer").append(
           "<h3>"+song+"</h3><p>"+stream+"</p>");
        });
     });
   });		

   </script>
</head>
<body>
 
<div id="mediaContainer">
</div>
 
</body>
</html>
```

XML


```
<?xml version="1.0"?>
<cast>
<mount>
<stream>
Stream 1
</stream>
<song>
Song 1
</song>
</mount>
<mount>
<stream>
Stream 2
</stream>
<song>
Song 2
</song>
</mount>
<mount>
<stream>
Stream 3
</stream>
<song>
Song 3
</song>
</mount>
<mount>
<stream>
Stream 4
</stream>
<song>
Song 4
</song>
</mount>
</cast>
```

LG

Bilal


----------



## chmee (20. November 2012)

(a) jQuery existiert inzwischen in einer Version 1.83. Da einige Änderungen stattgefunden haben, würde ich Dir empfehlen, gleich mit der aktuellen zu arbeiten.

```
https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
```

(b) In den Untiefen des Netzes findet sich für jQuery das Timers-Plugin, dass für Deine zweite Frage die Antwort wäre. Einfach zu benutzen.
http://jquery.offput.ca/timers/  bzw.  http://archive.plugins.jquery.com/project/timers

(c)  Bin grad unterwegs, und kann es nicht nachbauen. Hast Du Dir mal testweise alerts eingebaut, um zu schauen, was in den Variablen abgelegt ist? zB in die each-funktion ein

```
alert($MyMedia);
```
 oder mit firebug Stoppunkte gesetzt und dann die Variablen angeschaut?

mfg chmee


----------



## Webesek (26. November 2012)

Danke für die schnelle Antwort.

Nach langem probieren hab ich das problem so gelöst :


```
<!DOCTYPE html> 
<html> 
<head> 
   <title>XML AUSLESEN</title> 
   <meta charset="UTF-8"> 
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    
   <script type="text/javascript"> 
  
   setInterval(function() {
  
       $(document).ready(function(h1) 
   { 
  
        $.get("song.xsl", function(XMLmediaArray){ 
        $(XMLmediaArray).find("mount").each(function(){ 
        var $myMedia = $(this); 
        var song = $myMedia.find("song").text(); 
        var stream = $myMedia.find("stream").text(); 
        $("#mediaContainer").append( 
           "<h3>"+song+"</h3><p>"+stream+"</p>"); 
        }); 
     }); 
   });         
}, 3000);

setInterval(function() {
 $("#mediaContainer").empty();       
}, 2999);

   </script> 
</head> 
<body> 
  
<div id="mediaContainer"> 
</div> 
  
</body> 
</html>
```


Nur wie bekomme ich es hin das nur der 2. stream und song ausgelesen wird..?
und bei opera funktioniert das ganze gar nicht nur bei mozilla und IE

LG
Bilal


----------



## erik s. (26. November 2012)

Hi,

besser wäre es, den Interval-Aufrauf *in* den ready-Handler zu packen.

```
$(document).ready(function()  {
  window.setInterval(function()  {
    $.get("song.xsl", function(XMLmediaArray)  { 
      $(XMLmediaArray).find("mount").each(function() { 
        var $myMedia = $(this); 
        var song = $myMedia.find("song").text(); 
        var stream = $myMedia.find("stream").text(); 
        $("#mediaContainer").append( "<h3>"+song+"</h3><p>"+stream+"</p>"); 
      });
    });
  }, 20000);
});
```

BTW fehlte bei dir einmal *});*. Manche Browser durchlaufen den Code dann halt stur bis zum ersten Problem, andere nicht.


----------



## Webesek (26. November 2012)

Hi,

Danke für die Antwort aber leider besteht das Problem immer noch in Opera und wie bekomme ich es hin das nur bestimmt Bereiche ausgeben werden..?

LG
Bilal


----------



## erik s. (26. November 2012)

Da sind noch ein paar Debug-Anweisungen dabei, macht aber nix.

```
var counter = 1;
var getSongs = function()  {
	$.get("song.xsl", function(XMLmediaArray)  { 
		$('#mediaContainer').html("<h2>"+counter+"</h2>");
		counter++;

		$(XMLmediaArray).find("mount").each(function() { 
			var $myMedia = $(this); 
			var song = $myMedia.find("song").text(); 
			var stream = $myMedia.find("stream").text(); 
			if(stream.indexOf("Stream 2") > -1)  {
				$("#mediaContainer").append( "<h3>"+song+"</h3><p>"+stream+"</p>"); 
			}
		});
	});
}
$(document).ready(function()  {
	alert('Test');
	window.setInterval("getSongs()", 5000);
});
```


----------



## Webesek (26. November 2012)

Das funktioniert leider nicht die xml Datei ändert sich alle 3 min deswegen ist das hier nicht mehr der fall

```
if(stream.indexOf("Stream 2") > -1)  {
                $("#mediaContainer").append( "<h3>"+song+"</h3><p>"+stream+"</p>"); 
            }
```


 ich muss definieren können zum z.B. dass das 3 mount abgegriffen wird und der Inhalt song und stream vom mount 3 angezeigt werden...

LG


----------



## erik s. (26. November 2012)

.eq() hilft dir da weiter.


----------



## Webesek (26. November 2012)

super Danke funktioniert perfekt  

nur da wäre noch das Problem mit Opera  dafür finden wir glaub ich keine Lösung google weiß ausnahmsweise dafür auch kein Rat...


```
var counter = 1;
var getSongs = function()  {
    $.get("song.xsl", function(XMLmediaArray)  { 
        $('#mediaContainer').html("<h2>"+counter+"</h2>");
        counter++;
 
        $(XMLmediaArray).find("mount").eq(1).each(function() { 
            var $myMedia = $(this); 
            var song = $myMedia.find("song").text(); 
            var stream = $myMedia.find("stream").text(); 
           
                $("#mediaContainer").append( "<h3>"+song+"</h3><p>"+stream+"</p>"); 
            
        });
    });
}
$(document).ready(function()  {
    
    window.setInterval("getSongs()", 500);
});
```


----------

