XMLSeite mit PHP parsen
N00B
- php
Hallo Leute,
Ich möchte eine xml Seite über php "auslesen" und anzeigen lassen.
hier die xml:
<?xml version="1.0" standalone="yes"?>
<termine> <title>Termine2008</title>
<termin>
Dies ist der erste testtermin<br>
Ort xyz<br>
xxxxxx<br>
</termin>
<termin>
Dies ist der zeite testtermin<br>
Ort zyx<br>
aaaaaaa
</termin>
<termin>
Dies ist der dritte testtermin<br>
Ort zyx<br>
aaaaaaa
</termin>
</termine>
hier das PHP:
<?php
if (file_exists('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');
echo $xml->termin[0];
} else {
exit('Konnte Datei nicht laden.');
}
?>
es funktionier nun einwandfrei den ersten Termin auszulesen und anzuzeigen. Wenn ich den zweiten Termin anzeigen lassen möchte, setze ich halt ->termin[1]; ein, usw...
Ich möchte aber alle drei (vielleicht auch mal 100) Termine anzeigen lassen.
Wie mach ich den dieses?
Danke
N00B
Moin!
Hallo Leute,
Ich möchte eine xml Seite über php "auslesen" und anzeigen lassen.
hier die xml:
<?xml version="1.0" standalone="yes"?>
<termine> <title>Termine2008</title>
<termin>
Dies ist der erste testtermin<br>
Ort xyz<br>
xxxxxx<br>
</termin>
Wäre nicht:
<?xml version="1.0" standalone="yes"?>
<termine> <title>Termine2008</title>
<termin>
<description>Dies ist der erste testtermin</description>
<plz>Der Ort</plz>
<adresse1></adresse1>
</termin>
</xml>
hier das PHP:
<?php
if (file_exists('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');echo $xml->termin[0];
} else {
exit('Konnte Datei nicht laden.');
}
?>es funktionier nun einwandfrei den ersten Termin auszulesen und anzuzeigen. Wenn ich den zweiten Termin anzeigen lassen möchte, setze ich halt ->termin[1]; ein, usw...
Ich möchte aber alle drei (vielleicht auch mal 100) Termine anzeigen lassen.
Wie mach ich den dieses
if (is_file('content/termine.xml') && is_readable('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');
$i=0;
while ($str=$xml->termin[$i]) {
print $str;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
Danke
N00B
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
if (is_file('content/termine.xml') && is_readable('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');
$i=0;
while ($str=$xml->termin[$i++]) { # <- Kleine Änderung, damit es auch 'läuft'.
print $str;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
if (is_file('content/termine.xml') && is_readable('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');
$i=0;
while ($str=$xml->termin[$i++]) { # <- Kleine Änderung, damit es auch 'läuft'.
print $str;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
>
> MFFG (Mit freundlich- friedfertigem Grinsen)
>
> fastix®
>
HI, vieeeeelen dank. Das Einfache ist manchmal so nah ;) (will sagen, ich habe es sogar verstanden !)
Gruß
N00B
ps. Was die xml angeht, die habe ich auch nochmal "überdacht" und umgeschrieben. Thx
Moin!
HI, vieeeeelen dank. Das Einfache ist manchmal so nah ;) (will sagen, ich habe es sogar verstanden !)
Hier die bessere Lösung:
test.xml
<?xml version="1.0" standalone="yes"?>
<xml>
<title>Termine2008</title>
<termin>
<name>Testtermin 1</name>
<ort>Ort 1</ort>
</termin>
<termin>
<name>Testermin 2</name>
<ort>Ort 2</ort>
</termin>
</xml>
<?php
if (is_file('test.xml') && is_readable('test.xml')) {
$xml = simplexml_load_file('test.xml');
$i=0;
while (@$str=$xml->termin[$i]->ort) {
print $xml->termin[$i]->name."/";
print $xml->termin[$i]->ort."\n";
$i++;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hi
<?php
if (is_file('test.xml') && is_readable('test.xml')) {
$xml = simplexml_load_file('test.xml');
$i=0;
while (@$str=$xml->termin[$i]->ort) {
print $xml->termin[$i]->name."/";
print $xml->termin[$i]->ort."\n";
$i++;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
> MFFG (Mit freundlich- friedfertigem Grinsen)
>
> fastix®
Yau, so funzt es (bitte ignriere was ich)
Mercy!!
N00B
PS. Als Belohnung nutze ich jetzt auch Dein PHP Formmailer :)
Moin!
PS. Als Belohnung nutze ich jetzt auch Dein PHP Formmailer :)
Der ist nicht von mir. Ich habe lediglich ein paar Hinweise zur Sicherheit beigefügt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
echo $begrüßung;
Hier die bessere Lösung:
<?xml version="1.0" standalone="yes"?>
<xml>
[...]
</xml>
Das Root-Element war als "termine" benannt aussagekräftiger als das "xml".
<?php
$xml = simplexml_load_file('test.xml');
$i=0;
while (@$str=$xml->termin[$i]->ort) {
print $xml->termin[$i]->name."/";
print $xml->termin[$i]->ort."\n";
$i++;
}
SimpleXML arbeitet viel mit PHP-Magie und mit Funktionalität aus der SPL. Beispielsweise sorgt die magische Funktion __toString() bei einem Zugriff auf ein Objekt in einem String-Kontext für eine Ausgabe eines geeigneten Stringwertes. Die SPL erlaubt es, einer Klasse einen Iterator hinzuzufügen. Man kann dann ein Objekt dieser Klasse einem foreach als Argument übergeben. Somit läuft man nur die tatsächlichen (vom Iterator zur Verfügung gestellten) Elemente an. Deine Lösung greift solange zu, bis sie ins Leere fasst. Der Zugriff ins Leere wird nicht umsonst mit einer Meldung geahndet.
foreach ($xml->termin as $termin)
echo $termin->name, '/', $termin->ort, "\n";
Das PHP-Handbuch führt im SimpleXML-Kapitel eine Anzahl Beispiele auf, unter anderem genau für solch einen Fall.
Die Verwendung der "Magie" in SimpleXML sorgt in einigen Situationen für ein ungewöhnliches Verhalten wie man es von "normalem" PHP nicht gewohnt ist. Man sollte sich also an die im Handbuch aufgeführten Anwendungsbeispiele halten, um Überraschungen zu vermeiden.
echo "$verabschiedung $name";
Moin!
foreach ($xml->termin as $termin)
echo $termin->name, '/', $termin->ort, "\n";Das PHP-Handbuch führt im SimpleXML-Kapitel eine Anzahl Beispiele auf, unter anderem genau für solch einen Fall.
Ich danke Dir für den Hinweis. Ich nach einer Lösung des Problems mit foreach sogar Ausschau gehalten, diese hat bei mir nicht funktioniert, was wohl an einem anderen Fehler lag.
Deine Lösung ist besser.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin moin,
Moin!
Wäre nicht:
<?xml version="1.0" standalone="yes"?>
<termine> <title>Termine2008</title>
<termin>
<description>Dies ist der erste testtermin</description>
<plz>Der Ort</plz>
<adresse1></adresse1>
</termin>
</xml>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
jaaa, das wäre schön....;)
nur kann ich mit Deiner PHP Idee dann nicht die Termine auslesen:
<?php
if (is_file('content/termine.xml') && is_readable('content/termine.xml')) {
$xml = simplexml_load_file('content/termine.xml');
$i=0;
while ($str=$xml->termin[$i++]) {
print $str;
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
Es wird nichts angezeigt?!
Thanx
N00B
Moin!
jaaa, das wäre schön....;)
nur kann ich mit Deiner PHP Idee dann nicht die Termine auslesen:
Es wird nichts angezeigt?!
Schon beantwortet:
https://forum.selfhtml.org/?t=165223&m=1077234
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®