preg_replace Variablen und Arrays parsen

akkie

Erfahrenes Mitglied
Hallo

Ich suche eine Möglichkeit Variablen und Arrays aus einer XML Datei zu Parsen.

Ich habe jetzt eine Möglichkeit mit 2 preg_replace aufrufen. Kennt villeicht jemand eine mit einem Aufruf?

PHP:
Variablen
$content = preg_replace('@{(\$[A-Za-z0-9]*)}@e', "\\1", $content);

Arrays
$content = preg_replace('@{(\$[A-Za-z0-9\[]*)([\']*)([A-Za-z0-9]*)([\']*)([\]]*)}@e', "\\1'\\3'\\5", $content);

Mfg Akkie
 
Kannst du mal ein bisschen XML-Beispielcode posten,.... und sagen, was du daraus als Ausgabe haben möchtest.

Prinzipiell würde ich aber sagen, du solltest da mit preg_match_all() arbeiten(auch wenn das jetzt nix mit der Frage zu tun hat)
 
Hi

Ich habe die Installationsmodule meines CMS auf XML umgeschrieben. Eine XML-Reader Klasse habe ich mir schon geschrieben. Das Funktioniert auch alles.

Mein Problem ist nur das ich in der XML Datei Variablen benutze. Diese sollen mit den Original Variablen aus dem Script ersetzt werden.

Code:
<modul>
   <variables>
      <titel>{$lng['Items']}</titel>
      <dir>modules/system/items</dir>
      <file>items.php</file>
      <alias>items</alias>
      <version>Beta 0.1</version>
      <need>1</need>
      <typ>D3</typ>
   </variables>
   <sql>
      <create table="admin_items">
         <sqlcode>
            item_id int(11) NOT NULL auto_increment,
            modul_id int(11) NOT NULL default '0',
            action_id int(11) NOT NULL default '0',
            activ tinyint(1) NOT NULL default '0',
            start tinyint(1) NOT NULL default '0',
            PRIMARY KEY  (item_id)
         </sqlcode>
      </create>
      <create table="front_items">
         <sqlcode>
            item_id int(11) NOT NULL auto_increment,
            modul_id int(11) NOT NULL default '0',
            action_id int(11) NOT NULL default '0',
            activ tinyint(1) NOT NULL default '0',
            start tinyint(1) NOT NULL default '0',
            PRIMARY KEY  (item_id)
         </sqlcode>
      </create>
      <create table="admin_rights">
         <sqlcode>
            group_id int(11) NOT NULL default '0',
            item_id int(11) NOT NULL default '0',
            rights tinyint(1) NOT NULL default '0',
            PRIMARY KEY  (item_id,group_id)
         </sqlcode>
      </create>
      <insert table="modul">
         <sqlcode>
            (modul_id, alias, typ, need, titel, dir, file, version) VALUES
            ('{$MODID}', '{$ALIAS}', '{$TYP}', '{$NEED}', '{$TITEL}', '{$DIR}', '{$FILE}', '{$VERSION}')
         </sqlcode>
      </insert>
   </sql>
   <files>
      <dir name="modul">
         <file>test1.php</file>
         <file>test2.php</file>
         <file>test3.php</file>
      </dir>
      <dir name="tpl">
         <file>test1.php</file>
         <file>test8.php</file>
         <file>test3.php</file>
      </dir>
   </files>
</modul>

Wenn du Ahnung von der Materie hast würde ich dir gerne mal die Klasse schicken. Vielleicht hast du eine Idee wie ich diese optimieren kann. Das einlesen als Array dauert mir nämlich ein bissel zu lange.

Mfg Akkie
 
Hi

Wenn du diese Pattern auf ein Array anwendest wird für \\1 z.B. $lng[\'Modul\'] eingesetzt. Und das kann nicht geparst werden.



Mfg Akkie
 
Warum geparst... wenn man die Flag "e" benutzt, wird dort direkt der Wert der Variablen eingesetzt.
Theoretisch könntest du gleich
Code:
$content=eval($content)
schreiben... dann würden aber die geschweiften Klammern übrigbleiben.
 
Zurück