Mit PHP5 eine XML File Parsen

hi, ich hocke hier seit tagen und krieg es nicht hin. daher wende ich mich jetzt hier hin.
ich habe eine xml file die sieht ungefähr so aus

<?xml version="1.0" encoding="UTF-8" ?>TextTextTextTextTextTextTextTextTextTextTextTextTextText

der zusammengebaute xml string welchen der parser enthalten soll enthält noch \n und \t für die umbruch und einrücken.

zur erklärung:

RootElement ist einfach der Wurzeltag der alles einschließt.
Dieser kann beliebig viele Item Tags beinhalten
Ein Item Tag besitzt verschiedene Elemente
Und optional ein „SubRoot“ Tag dieser schließt dann wieder mindestens ein SubItem ein.

Der Tag Subitems muss nicht zwangsläufig enthalten sein. Außerdem hat ein SubItem einige Tags die die gleiche bezeichung Element zwischen den Tags hat.

der inhalt zwischen den tags soll später einem objekt zugewiesen werden und wenn ein item tag geschlossen wird wird das objekt einem array zugewiesen und ein neues objekt gleichen typs instanziert.

nur hab ich keinen plan wie ich das machen soll, die dokumentation für simplexml und expat ist für mich mehr als nur dürftig ich verstehs einfach nicht.
da das php projekt objekt orientiert realisiert wurde wäre es praktisch wenn der parser auch objektorientiert wäre.

könnte mir jemand helfen und nen kleinen beispielparser mit erklärung bauen. ich kriegs alleine definitiv nicht hin. was ja nicht weiter schlimm wäre wenns net mein projekt für die abschlussprüfung wäre.

bitte helft mir weiter.
danke im vorraus.

Servus,

könnte mir jemand helfen

Sicher, dafür ist dieses Forum ja da.

und nen kleinen beispielparser mit erklärung bauen.

Glaube ich kaum, dass hier jemand die die ganze Arbeit abnimmt. Du solltest dich schon ein wenig bemühen, vielleicht etwas von deinem versuchten Code schreiben und dann nach den Stellen fragen, an denen du nicht mehr weiterkommst.

Sorry aber so ganz wird dir hier deine Arbeit auch nicht abgenommen - genauso wenig wie bei www.php-resource.de/forum/ :wink:

gruss Markus

genau da liegt das problem. ich hab keinen blassen schimmer ich hock schon seit tagen da und probier ständig irgendwas mit simplexml (wobei der noch net mal richtig den xml string laden kann) und mit expat rum.
aber ich weiß nicht wo vorne und hinten ist.

und zu expat finde ich einfach nix erklärendes im netz. ich kriegs einfach nicht hin. ich will mir ja auch net den arsch nachtragen lassen, aber es ist absolut dringend. muss bald damit fertig sein, da es mein abschlussprojekt ist.

wäre vielleicht ne erklärung mit expat drin wie man oben angegebenes xml gescheit parst?

Servus,
zu SimpleXML und DOM habe ich ein Tutorial gefunden:
http://www.tutorials.de/tutorials176534.html

und zu expat finde ich einfach nix erklärendes im netz. ich

Ich weiss nicht, aber nach einer Minute in Google kam ich auf folgendes:
http://www.devmag.net/webprog/php_xml_expat_1.htm
Habe ich mir zwar nur überfolgen, aber eigentlich dürfte es für den Einstieg reichen…

nachtragen lassen, aber es ist absolut dringend. muss bald
damit fertig sein, da es mein abschlussprojekt ist.

Was ist denn das für ein Abschlussprojekt? Ausbildung?

Gruß Markus

das über expat hab ich auch in der art gefunden.
kann man das ding auch in ne klasse packen?

das was mich so verwirrt ist, das ich ja verschachtelte elemente hab und das bereitet mir probleme.

ja is für die ausbildung :smiley:
daher wäre zuviel code posten bzw zuviel code kopieren prüfungsmäßig selbstmord :smiley:
naja ich probiers dann noch einmal.

Andere Frage:
ist das XML-File in der Form

<?xml version="1.0" encoding="UTF-8" ?>TextTextTextTextTextTextTextTextTextTextTextTextTextText

vorgegeben, oder kannst du das etwas abändern. Das würde die Sache noch etwas vereinfachen und zumindest über SimpleXML zu einer schnelleren Lösung führen:

<?xml version="1.0" encoding="UTF-8" ?>TextTextTextTextTextTextTextTextTextTextTextTextTextText

Also ohne Element1-, Element2-Tags, sondern nur allgemeinen Element-Tags. Ist eh irgendwie schwachsinnig, da ja alle von der gleichen „Art“ sind - daher sollten sie auch alle gleich heißen. Du schreibst ja auch nicht:

...

...


Gruß Markus

gruß Markus

nene das is vielleicht etwas missverständlich

ich hab mehrere verschiedennamige elemente wie z.B. sind quasi nur die platzhalter.

aber expat oop gibts net das muss prozedural gemacht werden oder?
habs nämlich mal objektorientiert versucht aber das klappt glaub ich net so ganz…

achja was mir noch einfällt bei der erklärung von expat wird auf ein nachfolge tut verwiesen, gibts das schon? weil das mit $global ist ja auch net so das wahre

hab noch ne kleine frage.
ich bin das beispiel nochmal durchgegangen und versuchs jetzt einfach so zu modifierzieren das es meinen bedürfnissen entspricht.

nur wie kann ich mit der cdata funktion einem attribut den wert zuweisen?
ich hab das imo so probiert (was nicht so ganz funktioniert)

function startElement($parser, $element\_name, $element\_attribute) 
{
 //global $ausgabe;

 global $SingleItem;
 global $SingleSubItem;
 global $strInhalt;

 //Überprüfung des Elementnames
 switch(strtolower($element\_name))
 {
 case 'item': $SingleItem = new Item();
 break;
 case 'bugnote': $SingleSubItem = new SubItem();
 break;
 case 'setElement1': $SingleItem-\>setElement1($strInhalt);
 break;
 case 'setElement2': $SingleItem-\>setElement2($strInhalt);
 break;
 case 'setElement3': $SingleItem-\>setElement3($strInhalt);
 break;
 case 'setElement4: $SingleItem-\>setElement4($strInhalt);
 break; 
 }
}
function endElement($parser, $element\_name) 
{ 
 global $SingleItem;
 global $SingleSubItem;
 global $aSubItems;
 global $aItems;

 switch(strtolower($element\_name))
 {
 case 'item': $aItems[] = $SingleItem;
 break;
 case 'subitem': $aSubItems[] = $SingleSubItem;
 break; 
 }
}
function cdata($parser, $element\_inhalt) 
{
 global $strInhalt;
 $strInhalt = $element\_inhalt;
}

mein gedanke war wenn er die umschließenden tags item bzw subitem findet soll er ein neues objekt instanzieren und sobald er das entsprechende schließende tag findet, soll er das objekt zu einem array hinzu fügen.

nur leider hab ich das prinzip von den handlern noch nicht so ganz gecheckt. wird zuerst startelement aufgerufen und überprüft welcher tag es ist und dann cdata oder wie läuft das ab?