Anfängerfragen zu XML und PHP

Myar

Mitglied
allöchen!

Vorweg: Ja ich habe bereits gesucht bei google und hier im Forum. Im Prinzip habe ich ja einen Weg gefunden, nur funktioniert dieser nicht und ich brauche da eher Hilfe.

Und zwar will ich ein Menu aus einer XML Datei zusammenstellen lassen. Dazu soll je nach nachdem was gebraucht wird, ein zweig herausgesucht werden und dann das Menu angezeigt werden.

Dies wäre ein Beispiel für das Menu:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<Menu>
  <loggedinnochar>
    <kategorie title="~Charakter~" descritpion="Charakter">
      <link title ="Charakter erschaffen" url="?showpage=charaktererschaffen" />
    </kategorie>
  </loggedinnochar>
  <loggedinonechar>
    <kategorie title="~Charakter~" descritpion="Charakter">
      <link title ="Charakter erschaffen" url="?showpage=charaktererschaffen" />
      <link title ="Charakter1" url="?skript=charwaehlen" />
    </kategorie>
  </loggedinonechar>
  <loggedintwochars>
    <kategorie title="~Charakter~" descritpion="Charakter">
      <link title ="Charakter1" url="?skript=charwaehlen" />
      <link title ="Charakter2" url="?skript=charwaehlen" />
    </kategorie>
  </loggedintwochars>
</Menu>

Und das ist die Klasse zum auslesen:
PHP:
<?php

// XML Datei auslesen

class xmlparse{

      public function parse($datei='../xml/menu.xml'){

             $xml = simplexml_load_file($datei);
       $result = $xml->xpath('Menu/loggedinnochar');

            foreach($result as $menu){
       $menus = $menu;
      }
      echo $menus;
      }

}
?>

So, eine Variable soll mal bestimmen, welches Menu ich brauche. Alles was unter "loggedinnochar" zu finden ist, ist das Menu.
Ich brauche die Kategorie als Überschrift und den Link... als Link.

Aber die Funktion da oben gibt mir bisher gar nicht aus Oo

Zweite Frage wäre, ob ich innerhalb der XML Tags auch Variablen unterbringen kann, die dann später ersetzt werden.. sowas:
Code:
<loggedinonechar>
    <kategorie title="~Charakter~" descritpion="Charakter">
      <link title ="Charakter erschaffen" url="?showpage=charaktererschaffen" />
      <link title =$caharaktername url="?skript=charwaehlen" />
    </kategorie>
  </loggedinonechar>

Ist das möglich?

Ihr seht, viele Fragen sind offen. Ich suche nichtmal fertige Lösungen (außer beim ersten Problem finde ich nun wirklich nicht, was ich falsch mache). Hinweise reichen...

Schönen Gruß
Myar
 
Zu Deinem ersten Problem:

Gib den Pfad wie folgt an (erster Slash = starte von der Wurzel)

PHP:
$result = $xml->xpath('/Menu/loggedinnochar');

Danach erhälst Du ein Array wir folgt:

Code:
Array
(
    [0] => SimpleXMLElement Object
        (
            [kategorie] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => ~Charakter~
                            [descritpion] => Charakter
                        )

                    [link] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [title] => Charakter erschaffen
                                    [url] => ?showpage=charaktererschaffen
                                )
                        )
                )
        )
)

Das zu verarbeiten überlasse ich Dir ;)


Zu Deiner zweiten Frage - Verwende doch einfach:

Code:
<loggedinonechar>
    <kategorie title="~Charakter~" descritpion="Charakter">
      <link title ="CharCreate" url="?showpage=charaktererschaffen" />
      <link title ="CharChoose" url="?skript=charwaehlen" />
    </kategorie>
  </loggedinonechar>

Bei der Ausgabe gibst Du dann nicht den Wert von title aus, sondern ersetzt diesen durch einen anderen.
 
Danke für die Antwort :)

Nunja, nach einer Woche rumprobieren, habe ich nun XML die Todfeindschaft erklärt und werde meine Vorhaben mittels SQL lösen.
Danke denoch für deine Zeit!

Gruß
Myar
 
Versuch mal statt einer Woche rumzuprobieren, in dieser Zeit ein Buch zum Thema zu lesen :) Dann werden einem viele Dinge klar ;)
 
Zurück