2011-01-02 17 views
1

XMLにデータを追加して正しく動作する次のPHPコードがあります。しかし、私の2番目のステップでは、いくつかの要素を削除するフォームを作成します。問題は、ID番号を追加してから、PHPファイルがそのID番号を検索し、ノード全体を削除することです。XMLで属性を作成

私の質問は、これを動作させるためにCDにIDを追加するにはどうすればいいですか?

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

insert.php(フォームと私のインデックスファイル)

<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(メインコード)

<?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"); 
?> 

XMLファイル

<?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> 

答えて

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

こんにちはajrealとあなたの答えに感謝します。私は管理し、フォームを介してIDを与えることによって、別の例から "削除"ソリューションを見つける。 しかし、私は "属性IDの追加"のコードを完全に理解できませんでした。私はIDを解析して "CD"の隣に追加される新しいフォームを作成します。 どんな助けがあっても大丈夫です – JBEnergy

+0

@ user560411 - これは ''とはまったく異なります。ランダムなID割り当て – ajreal

+0

です。この部分を既存のコードに追加する際にエラーが見つかりました... – JBEnergy

関連する問題