2011-01-02 10 views
1

Ich habe den folgenden PHP-Code, der Daten in XML hinzufügt und ordnungsgemäß funktioniert. In meinem zweiten Schritt werde ich jedoch ein Formular erstellen, das einige der Elemente löscht. Das Problem ist, dass ich eine ID-Nummer hinzufügen möchte und dann wird die PHP-Datei danach suchen und den gesamten Knoten löschen.Attribut in XML erstellen

Meine Frage ist, wie kann ich eine ID in CD hinzufügen, damit dies funktioniert?

For example (<cd id="xxxx">) 

insert.php (meine Index-Datei mit dem Formular)

<h1>Playlist</h1> 
<form action="insert2.php" method="post"> 
<fieldset> 
<label for="TITLE">TITLE:</label><input type="text" id="title" name="title" /><br /> 
<label for="title">BAND:</label> <input type="text" id="band" name="band"/><br /> 
<label for="path">YEAR:</label> <input type="text" id="year" name="year" /> <br /> 
<input type="submit" /> 
</fieldset> 
</form> 
<h2>Current entries:</h2> 
<p>TITLE - BAND - YEAR</p> 
<?php 
$doc = new DOMDocument(); 
$doc->load('insert.xml'); 

$CATEGORIES = $doc->getElementsByTagName("CD"); 
foreach($CATEGORIES as $CD) 
{ 
    $TITLES = $CD->getElementsByTagName("TITLE"); 
    $TITLE = $TITLES->item(0)->nodeValue; 

    $BANDS= $CD->getElementsByTagName("BAND"); 
    $BAND= $BANDS->item(0)->nodeValue; 

    $YEARS = $CD->getElementsByTagName("YEAR"); 
    $YEAR = $YEARS->item(0)->nodeValue; 

    echo "<b>$TITLE - $BAND - $YEAR\n</b><br>"; 
    } 
?> 

inser2.php (der Hauptcode)

<?php 

$CD = array(
    'TITLE' => $_POST['title'], 
    'BAND' => $_POST['band'], 
    'YEAR' => $_POST['year'], 
); 

$doc = new DOMDocument(); 
$doc->load('insert.xml'); 

$doc->formatOutput = true; 
$r = $doc->getElementsByTagName("CATEGORIES")->item(0); 

$b = $doc->createElement("CD"); 


$TITLE = $doc->createElement("TITLE"); 
$TITLE->appendChild(
    $doc->createTextNode($CD["TITLE"]) 
); 
$b->appendChild($TITLE); 

$BAND = $doc->createElement("BAND"); 
$BAND->appendChild(
    $doc->createTextNode($CD["BAND"]) 
); 
$b->appendChild($BAND); 

$YEAR = $doc->createElement("YEAR"); 
$YEAR->appendChild(
    $doc->createTextNode($CD["YEAR"]) 
); 

$b->appendChild($YEAR); 
$r->appendChild($b); 

$doc->save("insert.xml"); 
?> 

die XML-Datei

<?xml version="1.0" encoding="utf-8"?> 
<MY_CD> 
<CATEGORIES> 

<CD> 
<TITLE>NEVER MIND THE BOLLOCKS</TITLE> 
<BAND>SEX PISTOLS</BAND> 
<YEAR>1977</YEAR> 
</CD> 


<CD>  
<TITLE>NEVERMIND</TITLE> 
<BAND>NIRVANA</BAND> 
<YEAR>1991</YEAR> 
</CD> 

</CATEGORIES> 
</MY_CD> 

Antwort

4
$dom = $new_dom = new DOMDocument; 
$dom->load('insert.xml'); 

/* add attribute id */ 
$xpath = new DOMXpath($dom); 
$items = $xpath->query('/MY_CD/CATEGORIES/*'); 
$id = 1; 
foreach ($items as $item) 
{ 
    $item->setAttributeNode(new DOMAttr('id', $id)); 
    ++$id; 
} 

/* remove a node where id=2 */ 
$new_dom->loadXMl($dom->saveXML()); 
$xpath = new DOMXpath($new_dom); 
$items = $xpath->query('/MY_CD/CATEGORIES/CD[@id="2"]'); 
foreach ($items as $item) 
{ 
    $item->parentNode->removeChild($item); 
} 
echo $new_dom->saveXML(); 
+0

Hallo Ajreal und danke für Ihre Antwort. Ich habe es geschafft und finde die "lösche" Lösung von einem anderen Beispiel, indem ich die ID durch ein Formular gebe. Allerdings habe ich nicht ganz Ihren Code für die "add attribute id" verstanden. Ich werde ein neues Formular erstellen, das die ID analysiert und neben "CD" hinzugefügt wird. Jede Hilfe wäre toll – JBEnergy

+0

@ user560411 - ist nicht viel anders zu behandeln, dass als '' , ist eine Art Zufalls id Zuordnung – ajreal

+0

Sorry, aber ich Fehler finden, diesen Teil in den bestehenden Code zum Hinzufügen ... – JBEnergy