XML bewerken met PHP

Status
Niet open voor verdere reacties.

bruglione

Gebruiker
Lid geworden
28 okt 2008
Berichten
79
Hoi,

Ik zit momenteel met het volgende probleem. Ik heb een XML bestand met daarin een serie games met attributes/elements. Dit bestand weergeef ik op een HTML website door gebruik van een PHP script. Ook heb ik doormiddel van formulieren en PHP een optie gemaakt op games aan XML toe te voegen via deze website. Nu ben ik echter bezig met het maken van een textvak/delete knop om een bepaalde game te verwijderen. Ik wil de game selecteren op ID en deze er dan compleet uitgooien.

XML:
Code:
<games>
 <game id="1" name="Warcraft 1" genre="Strategy" year="1995">
  <developers>
   <developer>Blizzard</developer>
  </developers>
 </game>
 <game id="2" name="Assasins Creed" genre="RPG" year="2007">
  <developers>
   <developer>Activision</developer>
  </developers>
 </game>
 <game id="3" name="Gears of war" genre="Shooter" year="2007">
  <developers>
   <developer>Epic games</developer>
  </developers>
 </game>
 <game id="4" name="Red Alert 2" genre="Strategy" year="2000">
  <developers>
   <developer>Westwood</developer>
  </developers>
 </game>
 <game id="5" name="Dragon Age" genre="RPG" year="2009"> 
  <developers>
   <developer>EA Games</developer>
   <developer>Bioware</developer>
  </developers>
 </game>
</games>

PHP om XML te weergeven in tabel:
Code:
<?php
$doc = new DOMDocument();             
$doc->load('test.xml');

$gameNodes= $doc->getElementsByTagName('game');

foreach($gameNodes as $g) {
  echo "<tr>";
  echo "<td>".$g->getAttribute("id")."</td>";
  echo "<td>".$g->getAttribute("name")."</td>";
  echo "<td>".$g->getAttribute("genre")."</td>";
  echo "<td>".$g->getAttribute("year")."</td>";
  echo "<td>";
$developerNodes= $g->getElementsByTagName('developer');
for ($didx = 0; $didx < $developerNodes->length; $didx++) {
$h = $developerNodes->item($didx);
  echo "<div>".$h->firstChild->nodeValue."</div>";
  } 
  echo "</td>";
  echo "</tr>";
  }
?>

Nu is dus de vraag wat voor script ik zou kunnen maken om een ID op te sporen en hiermee de hele game node te verwijderen.

Ik heb op het moment het volgende formulier gemaakt:
Code:
  <form action="del.php" method="get" enctype="multipart/form-data">
   <table>
    <tr>
     <td colspan="2"class="labelcell"><label for="id">ID:</label></td>
     <td colspan="2"class="fieldcell"><input type="text" id="id" name="id"  tabindex="1"/></td>
     <td colspan="4"><input type="submit" class="box" value="delete" tabindex="5" /></td>
    </tr>
   </table>
  </form>

Nu heb ik dus geen idee waar ik moet beginnen om een PHP script te maken wat ervoor zorgt dat de informatie uit het formulier word opgehaald en hiermee de node verwijderd kan worden.

Alle tips/oplossingen zijn welkom!

Alvast bedankt
 
Ok ik heb nog is wat verder zitten zoeken en heb nu het volgende PHP script wat ik probeer te laten werken met het formulier.

Code:
<?php
 
$doc = new DOMDocument();
$doc->load( 'test.xml' );

$doc->formatOutput = true;

$id = $_GET['id'];

$xpath = new DOMXPath($doc);

$query = '//games/game[@id = "'.$id.'"]';

$entries = $xpath->query($query);

foreach ($entries as $e)  {
    $e->parentNode->removeChild($e);
}

?>

Iemand suggesties?
 
PHP:
<?php
$id=$_GET["id"];
$bestand = "game.xml";
$data = file_get_contents($bestand);
$doc=new SimpleXMLElement($data);
foreach($doc->game as $game)
{
    if($game['id'] == $id) {
        $dom=dom_import_simplexml($game);
        $dom->parentNode->removeChild($dom);
    }
}
$fh = fopen($bestand, 'w') or die("can't open file");
fwrite($fh, $doc->asXml());
fclose($fh);
?>
Dit werkt, maar nu heb je wel dat je ID's niet meer netjes nummeren..
Hoe je dat op moet lossen weet ik zo snel niet, dan zou je door de hele xml moeten loopen en alle ID's-1 moeten doen..
 
Hey bedankt voor je antwoord, ik zal kijken wat ik ermee kan doen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan