xmlファイルにキーが設定されていて、特定のキーが使用されるとxmlファイルから削除されます。以下のコードは実行されますが、キーはXMLファイルから削除されません。私はここでは、foreach()
に "&"を入れると、foreach()
で作成された一時的なデータではなく、実際のxmlファイルのデータで作業していることを確認できます。 ;SimpleXMLElement unset()が動作しません
Fatal error: An iterator cannot be used with foreach by reference in ....
xmlファイル
<proctor>
<keys>
<key>afvr3e</key>
<key>578jyd</key>
<key>hnr6rg</key>
<key>890kg7</key>
<key>hn3rgd</key>
</keys>
</proctor>
PHPのインデックスファイル
$key = new ProctorKey('proctorKey.xml');
$key->DeleteKey('hnr6rg');
PHPのクラスファイルのすべての
class ProctorKey
{
private $file;
public function __construct($file)
{
$this->file = $file;
}
public function DeleteKey($keyToDelete)
{
$xml = simplexml_load_file($this->file)or die("Error: Cannot create object");
/* this throws a fatal error
* foreach($xml->keys as &key)
*/
foreach($xml->keys->key as $key)
{
if($key==$keyToDelete)
{
unset($key);
print('found');
}
}
return $this->FormatXML($xml->asXML());
}
private function FormatXML($data)
{
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($data);
$dom->save($this->file);
$response = ($dom)?true:false;
return $response;
}
}
残念ながら、これはうまくいきませんでした。別のキーを削除しようとしましたが、私はxpathで読み上げるつもりです、私はコードの外観が好きです:) – Mike
あなたはそれがうまくいかなかったと言います、それは何ですか?それは私のためにいいです - http://codepad.viper-7.com/w11l8U – salathe
私はコードを実行すると、それは正常に実行され、エラーはありません。しかし、私はxmlファイルを見ると、私はまだキーを参照してください。私はあなたのコードがコードパッドで少し違っていることに気付きました...私は、あなたがそこに持っている方法とまったく同じ方法でクイックテストファイルを作成し、何が起こるか見るつもりです。私はすぐに戻ってくるだろう;) – Mike