Durchlaufen der Datensätze in einer XML-Datei

Hallo Leute,

ich stehe etwas auf dem Schlauch. Ich möchte einer XML-Datei ein paar Informationen entnehmen. So funktioniert es alle entsprechenden Datensätze aus der Datei herauszufiltern (Auszug, hier werden alle Programme aufgezählt):

$liste = ENIGMA2_GetServiceBouquetsOrServices($dreamboxIP,'1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.mein_tv.tv" ORDER BY bouquet'); 

foreach ($liste as $bouquet)
{
   $Programm[$z][0]=$z; // Sendernummer
	$Programm[$z][1]=trim($bouquet->e2servicename); // Sendername
	$Programm[$z][2]=trim($bouquet->e2servicereference); // Senderreferenznummer


Wie muss ich es aber anstellen, wenn ich in einem ähnlichen Konstrukt nur die ersten x Daten haben möchte (Auszug, hier soll die aktuelle und die nachfolgende Sendung ermittelt werden)?

for($i=0; $i<2; $i++)
			{
$liste2 = ENIGMA2_EPG($dreamboxIP, $Programm[$z][2]);
$Sendung[$z][$i][0] = utf8_decode($liste2->e2eventtitle); // Sendungsname


Der Fehler liegt wohl daran, was vor dem „->e2eventtitle“ steht?

Vielleicht kann mir ja jemand mal auf Sprünge helfen…:wink:

Joachim

Moin,

Hallo Tetrapack,

vielen Dank für Deine Antwort.

Hat jemand noch einen anderen Tipp?:confused:

Joachim

Hallo Leute,

ich versuche die Frage noch mal etwas anders zu formulieren, da das Skript so wie es hier folgt zwar läuft, aber nicht sehr schnell ist:

include ('f_Enigma_2.ips.php') ;
set_time_limit(120); //Timeout auf 30s setzen
$dreamboxIP = "192.168.178.39";

$liste = ENIGMA2_GetServiceBouquetsOrServices($dreamboxIP,'1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.mein_tv.tv" ORDER BY bouquet');
$z = 1;

foreach ($liste as $bouquet)
{
   $Programm[$z][0]=$z; // Sendernummer
	$Programm[$z][1]=trim($bouquet->e2servicename); // Sendername
	$Programm[$z][2]=trim($bouquet->e2servicereference); // Senderreferenznummer
	echo $Programm[$z][0].". ".$Programm[$z][1]." 
";
		$liste2 = ENIGMA2_EPG($dreamboxIP, $Programm[$z][2]);
		$i = 0;
		foreach ($liste2 as $sendung)
      {
		   If ($i < 2)
			{
				$Sendungsinfo[$z][$i][0] = utf8_decode($sendung->e2eventtitle); // Sendungsname
				echo utf8_decode("$sendung->e2eventtitle 
");
			}
			$i = $i + 1;
		}
	$z = $z + 1;
}
return;

Es geht um die „innere“ Foreach-Konstruktion. Ich wollte nur den aktuelle und die darauf folgende Sendung abbilden. So wie es jetzt jetzt wird aber der komplette Datensatz durchlaufen, obwohl nur zwei Einträge angezeigt werden.

Oder man würde schon bei der Funktion „ENIGMA2_EPG“ den Hebel ansetzen, um dort die Anzahl der Datensätze zu reduzieren…

function ENIGMA2_EPG($ipadr,$sender = "")
{
   $xmlResult[] = "";
      $sender = urlencode($sender);
      $xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/epgservice?sRef=$sender"));
return $xmlResult;
}

Alle meine Versuche sind aber bisher fehlgeschlagen hier in das Skript „ein bißchen mehr Schwung zu bekommen“.:frowning:
Vielleicht fällt einem von Euch ja noch etwas ein…

Joachim

Bau einen Zähler mit in die foreach() Schleife ein und brich dann nach x Durchläufen mit break; ab :wink: