PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP - Zähler für ein Array und XML Textsruktur


grutho
31.08.2009, 18:59:30
Hallo,
als relativer PHP-Neuling steh ich mittlerweile vor einer für mich unlösbaren Aufgabe... ;-)

Ich lese mittels PHP eine XML Datei aus. Dabei stosse ich auf zwei Probleme:

Eigentlich sollten nur die letzten 5 Einträge (mit den höchsten ID's) ausgegeben werden. Zum anderem wird mir (scheinbar) beim Einlesen in das Array die Textstruktur zerschossen. Das heisst in der XML gibt es ein Feld welches Umbrüche enthält. Die sollten auch dort bleiben...

Würde mich freuen, wenn mir jemand nach unzähligen und nächtlichen Stunden helfen könnte.


$daten = file_get_contents("/www/... .../xml/projektanfragen.xml"); // Datei einlesen
$daten = explode("<Projektanfragen>" , $daten); // Inhalt in ein Array zerlegen

$daten = array_slice($daten, 1);

for ($i=0; $i<5; $i++) {
foreach ($daten as $elem) {


ereg("<ID>(.*)</ID>" , $elem , $id);
$id = $id[1];
ereg("<Datum_x0020_start>(.*)</Datum_x0020_start>" , $elem , $xml[$id]["datum_start"]);
ereg("<Datum_x0020_ende_x0020__x0028_Laufzeit_x0029_>(.*)</Datum_x0020_ende_x0020__x0028_Laufzeit_x0029_>" , $elem , $xml[$id]["datum_ende"]);
ereg("<Katekorie>(.*)</Katekorie>" , $elem , $xml[$id]["katekorie"]);
ereg("<Titel>(.*)</Titel>" , $elem , $xml[$id]["titel"]);
ereg("<Beschreibung>(.*)</Beschreibung>" , $elem , $xml[$id]["beschreibung"]);
ereg("<Leistungsort>(.*)</Leistungsort>" , $elem , $xml[$id]["ort"]);
ereg("<Quelle>(.*)</Quelle>" , $elem , $xml[$id]["quelle"]);
ereg("<Status>(.*)</Status>" , $elem , $xml[$id]["status"]);
ereg("<Type>(.*)</Type>" , $elem , $xml[$id]["type"]);

//baut Array mit den Typs auf
$type[$xml[$id]["type"][1]]++;
}
}

if (is_array($xml)) {
krsort ($xml);
}

echo "<table width='180' border='0' cellspacing='2' cellpadding='0'>";

foreach ($xml as $key => $elem) {

// selektion ob Projekt noch offen

if ($elem['status'][1] == "offen") {


// Tabellenansicht
echo " <tr>";
echo " <td colspan='4' valign='top'><FONT size='-1' FACE='arial'><strong>".$elem['titel'][1]." </strong></td>\n";
echo " </tr>";
echo " <td valign='top' width='100'><FONT size='-2' FACE='arial'>Typ: ".$elem['type'][1]." </font></td>\n";
echo " <tr>";
echo " <td colspan='4' valign='top'><FONT size='-1' FACE='arial'> ".substr($elem["beschreibung"][1],0,80)."... </td>\n";
echo " </tr>";
echo " <tr>";
echo " <td valign='top' width='150'><FONT size='-2' FACE='arial'>Ort: ".$elem["ort"][1]." </td>\n";
echo " <td valign='bottom' align='left'><FONT size='-2' FACE='arial'> <a href=\"/index.php?option=com_content&view=article&id=12&jobid=".$key."\" target='_parent'>...mehr</a> </font><br><br></td>\n";

echo " <tr>";

}
}



echo "</table>";



?>


Vorweg schon mal herzlichen Dnak für eure Hilfe,
Tom

grutho
31.08.2009, 19:43:57
Kleiner Nachtrag...

das mit der Übernahme des Zeilenumbruchs hab ich mittlerweile hingebracht. Grund für den fehlenden Umbruch waren die beiden unterschiedlichen Interpretationen von /n und <br>

Nachdem ich den Befehl nl2br genutzt habe, funktionierte auch die Echoausgabe richtig...

z.B.: echo nl2br (" <td colspan='4' valign='top'> ".$elem["beschreibung"][1]."</td>\n");

Nun würde ich mich nur noch über die Hilfe beim Zähler freuen....

xabbuh
01.09.2009, 11:43:35
Nimm doch lieber die DOM- (http://www.php.net/manual/en/book.dom.php) oder SimpleXML-Erweiterung (http://www.php.net/manual/en/book.simplexml.php) für die Analyse des XML-Dokumentes.

grutho
01.09.2009, 14:45:08
Nimm doch lieber die DOM- (http://www.php.net/manual/en/book.dom.php) oder SimpleXML-Erweiterung (http://www.php.net/manual/en/book.simplexml.php) für die Analyse des XML-Dokumentes.

Vielen Dank für die Antwort. Leider ist DOM und SimpleXML eine Frage der PHP Version, welche auf dem Server läuft. Die Problematik ist ja auch nicht beim Auslesen des XML Dokuments gegeben, sondern in der limitierung des Arrays.

Niemand eine Idee?