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