Daten in einer XML Datei ändernt (attribute)

snakeSz

Grünschnabel
Guten Tag erstmal, ich bin jetzt schon seit fast 2 Tagen am rumprobieren und versuche jetzt einmal hier mein glück.

Ich habe eine XML Datei die so aufgebaut ist:
PHP:
<configfile>
	<config name="title">Guestbook</config>
	<config name="maxPosts">5</config>
	<config name="allowVisitors">TRUE</config>
	<config name="spamGate">no</config>
	<config name="author">sz-media</config>
</configfile>

Ich lasse mir diese Felder auch schön ausgeben...
PHP:
	$path  = $_cmsaddons.$_GET['addon']."/config.xml";

	if(file_exists($path)) {
	    $xml = simplexml_load_file($path);
		echo "<table width=100%><tr align=left><th>Bezeichnung</th><th>Aktueller Wert</th><th>Neuer Wert</th></tr>";
		foreach ($xml -> config as $inhalt) {
		    $attribut[0] = $inhalt["name"];
			echo "<tr><td>$attribut[0]</td><td>$inhalt</td><td><input name=$inhalt type=text value=$inhalt /></td></tr>"; 
		}
		echo "<tr><td></td><td></td><td><input type=submit value=Edit /></td></tr></table>";
(Zu testzwecken erstmal mit tabellen ;-) )

Jetzt will ich aber die geänderten Werte wiederzurück schreiben, also bräuchte ich so etwas ähnliches (Pseudocode):

Edit Wert where attribut is "title"

leider habe ich hierfür keine wirklich akzeptable lösung gefunden...
Ein neues Element erstellen, es mit einem Wert füllen und dann mit einem vorhandenen ersetzen funktioniert. Aber wie kann man das element anhand der attribute identifizieren und so ersetzten?

Ich danke im vorraus,
Nico
 
Moin,

das ginge z.B. so : (wichtige Passagen sind fett markiert)

Code:
<?php

    $path  = $_cmsaddons.$_GET['addon']."/config.xml";

    if(file_exists($path)) 
    {
?>

<form method="post"><table width=100%><tr align=left><th>Bezeichnung</th><th>Aktueller Wert</th><th>Neuer Wert</th></tr>

<?php
        $xml = simplexml_load_file($path);

            for($i=0;$i<count($xml->config);++$i)
              {
                $name=''.$xml->config[$i]['name'];
                    //Knoteninhalt ändern
                if(isset($_POST['editXML'][$name]))
                  {
                    $xml->config[$i]=htmlentities($_POST['editXML'][$name]);
                  }
                
                
                echo '<tr>
                        <td>'.
                          $xml->config[$i]['name'].
                        '</td>
                        <td>'.
                          $xml->config[$i].
                        '</td>
                        <td>
                          <input name="editXML['.$name.']" type=text value='.htmlentities($xml->config[$i]).' />
                        </td>
                      </tr>'; 
                echo $xml->config[$i];
              }
     
?>

<tr><td></td><td></td><td><input type=submit value=Edit /></td></tr></table> 

<?php 
    //Geändertes XML in Datei schreiben
  $file=fopen($path,'w');
  fputs($file,$xml->asXML());
  fclose($file);
} 

?>

Es werden alle <config>-Elemente durchlaufen:
Code:
 for($i=0;$i<count($xml->config);++$i)

und ihr Inhalt ersetzt durch die dazu passende übermittelte POST-Variable:
Code:
$xml->config[$i]=htmlentities($_POST['editXML'][$name]);


Das geänderte simpleXML-Objekt wird dann zum Schluss in die Datei geschrieben
Code:
$file=fopen($path,'w');
  fputs($file,$xml->asXML());
  fclose($file);

...das wars :)

BTW:
...pushen ist unerwünscht, Details dazu stehen in der Netiquette ;)
 
sehr gut! Danke für die schnelle hilfe.
Sollte ich mich länger in der community auhalten, werde ich mir die Netiquette natürlich durchlesen :)


Ich werde es ausprobieren sobald ich zuhause bin. Und dann mein Feedback geben!

mfg Nico


----

Sehr schön, das ist ja sogar komplett auf meinen code angelegt!
Nochmals vielen dank und keep on good work :p
 
Zuletzt bearbeitet:
Zurück