Klasse Artikelparser

Ich brauch mal etwas Hilfe, denn ich komm mit meier HA nicht weiter. Die Datei artikelliste soll ein xml-file parsen und zwar mit Hilfe einer Klasse Artikelparser. Leider wird nix ausgegeben.

artikelliste.php

<?php include_once("Artikel.inc");<br />
// Hier werden die Eigenschaften der Klasse definiert.
class Artikelparser{
var $nummer;
var $art;
var $aktuell;
var $titel;
var $preis;

function Artikelparser($datei)
 {
$this-\>art = Array();

// Einlesen der XML-Datei.
$xmlFile = implode("", file("artikeldaten.xml"));
$parser = xml\_parser\_create();

// Methoden der Klasse werden aufgerufen.
xml\_set\_object($parser, $this);

xml\_set\_element\_handler($parser,"startElement","endElement");
xml\_set\_character\_data\_handler($parser, "cdata");
xml\_parse($parser, $xmlFile);
xml\_parser\_free($parser);
 }
function startElement($parser, $name, $atts) {
$this-\>aktuell = $name;
if($name == "ARTIKEL") {
$this-\>nummer = $atts["NUMMER"];
}
}
function endElement($parser, $name){
if($name == "ARTIKEL") {
$this-\>art[$this-\>nummer] = new Artikel($this-\>titel, $this-\>preis);
}
$this-\>aktuell = "";
}
function cdata($parser, $text) {
if($this-\>aktuell == "PREIS") $this-\>preis = $text;
if($this-\>aktuell == "TITEL") $this-\>titel = $text;
}

function getArtikelArray(){
return $this-\>art;
}
}
?\>

Artikel.inc

<?php class Artikel<br /> {
 var $name;
 var $anzahl;
 var $preis;

 function Artikel($name,$preis)
 {
 $this-\>name = $name;
 $this-\>anzahl = 1;
 $this-\>preis = $preis;
 }
 }
?\>

artikeldaten.xml

<?xml version="1.0" encoding="windows-1250"?>Der Herr der Ringe39.90Der kleine Hobbit19.90Grimms Märchen25.90Elric von und zu Melnibonee29.90Der Hase im Wald299.90

Für Hilfestellung wäre ich dankbar!

@RakonDark
das Script macht schon eine Runde, wird über die artikel.php aufgerufen. Die Artikel werden aber nicht aungezeigt.

<?php include("artikelliste.php")<br />$art = new Artikelparser($datei);
?\> Folgende Bücher können Sie bestellen 


 foreach($art as $nummer=\>$art\_objekt)
 {
 echo "["; echo $art\_objekt-\>name; echo "](warenkorb.php?artikel=%2524nummer) " . $art\_objekt -\> preis . " Euro \n";
 }
?\>

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi, eine ausgabe möglichkeit wäre

<?php include("artikelliste.php");<br />$art = new Artikelparser($datei);
echo "";
echo "";
echo " Folgende Bücher können Sie bestellen ";

foreach ($art-\>art as $elemente) {
 echo "Name : ".$elemente-\>name."\n
";
 echo "Preis : ".$elemente-\>preis."\n
";
}
?\>

aber deine nummer geht verloren vom artikel

if($name == "ARTIKEL") {
echo "Nummer: ".$atts[NUMMER]."
";
$this-\>nummer = $atts[NUMMER];
}
}
function endElement($parser, $name){
if($name == "ARTIKEL") {
$this-\>art[$this-\>nummer] = new Artikel($this-\>titel, $this-\>preis);
}
$this-\>aktuell = "";
}

bei endElement sollte man die Nummer mit Angeben

$this-\>art[$this-\>nummer] = new Artikel($this-\>titel, $this-\>preis);

da fehlt mir $this->nummer in der Initialisierung. Weil bei $art-> steht die letzte bearbeitete Nummer , halt this->nummer = art->nummer .

Auf wunsch nun ein vollständiges

index.php

<?php include("artikelliste.php");<br />$art = new Artikelparser($datei);
$Artikel = array();
?\>
.nummer {
 text-align:right;
 width:40px;
}
.name {
 text-align:left;
 width:200px;
}
.anzahl {
 text-align:right;
 width:40px;
}
.preis {
 text-align:right;
 width:70px;
}
 Folgende Bücher können Sie bestellen 

ArtNr
Name
Anzahl
Preis

<?php foreach ($art->art as $elemente) { $Artikel = $elemente-\>Ausgabe(); echo "\n"; foreach ($Artikel as $feld=\>$wert) { echo "".$wert."\n"; } echo "\n"; } ?\> Artikel.inc <?php class Artikel
{ var $nummer; var $name; var $anzahl; var $preis; function Artikel($nummer,$name,$preis) { $this-\>nummer = $nummer; $this-\>name = $name; $this-\>anzahl = 1; $this-\>preis = $preis; } function Ausgabe() { $arArtikel = array(); $arArtikel[nummer]=$this-\>nummer; $arArtikel[name]=$this-\>name; $arArtikel[anzahl]=$this-\>anzahl; $arArtikel[preis]=$this-\>preis; return $arArtikel; } } ?\> artikelliste.php <?php include_once("Artikel.inc");
// Hier werden die Eigenschaften der Klasse definiert. class Artikelparser{ var $nummer; var $art; var $aktuell; var $titel; var $preis; function Artikelparser($datei) { $this-\>art = Array(); // Einlesen der XML-Datei. $xmlFile = implode("", file("artikeldaten.xml")); $parser = xml\_parser\_create(); // Methoden der Klasse werden aufgerufen. xml\_set\_object($parser, $this); xml\_set\_element\_handler($parser,"startElement","endElement"); xml\_set\_character\_data\_handler($parser, "cdata"); xml\_parse($parser, $xmlFile); xml\_parser\_free($parser); } function startElement($parser, $name, $atts) { $this-\>aktuell = $name; if($name == "ARTIKEL") { $this-\>nummer = $atts[NUMMER]; } } function endElement($parser, $name){ if($name == "ARTIKEL") { $this-\>art[$this-\>nummer] = new Artikel($this-\>nummer,$this-\>titel,$this-\>preis); } $this-\>aktuell = ""; } function cdata($parser, $text) { if($this-\>aktuell == "PREIS") $this-\>preis = $text; if($this-\>aktuell == "NAME") $this-\>titel = $text; } function getArtikelArray(){ return $this-\>art; } } ?\> artikeldaten.xml <?xml version="1.0" encoding="windows-1250"?>Der Herr der Ringe39.90Der kleine Hobbit19.90Grimms Märchen25.90Elric von und zu Melnibonee29.90Der Hase im Wald299.90

ich find das zwar immernoch nciht so gelungen, aber es erfüllt seinen zweck