2017-01-05 18 views
1

次の構造を持つtest.xmlという名前のxmlファイルがあります。PHPの特定の属性に応じてxmlファイルの単一ノードを更新

<?xml version="1.0"?> 
    <markers> 
     <marker id="1" name="12" signal="23"/> 
     <marker id="2" name="12" signal="5"/> 
     <marker id="3" name="12" signal="6"/> 
     <marker id="4" name="12" signal="0"/> 
</markers> 

私はIDを送った私のサーバーコードにAJAX要求を行うと、私はその後、のsignal属性をid=3を送信する場合、例えば、1

によってtest.xmlsignal属性を増やしたいですid3のノードは7になり、ファイルを保存する必要があります。 いくつかの問題のためにファイル全体を書き直したいのではなく、属性を更新するだけです。

私はこれを試しましたが、正しい答えからは遠いと思います。誰も助けることができますか?

$id=$_POST['id']; 

$xml = new SimpleXMLElement('test.xml'); 

foreach($xml->xpath('marker') as $xml_row){ 
    if($xml_row->attributes('id') == $id){ 
     $xml_row->attr('signals ') = $xml_row->attributes('signals') + 1; 

    } 
} 
$xml->saveXML('test.xml'); 
+0

動作しませんか?例外はありますか? – Rabban

+0

内部サーバーエラー500 – DevMan

+0

を取得しました。error.logにエラーを記録する必要があります。投稿すると役立ちます。 – Tom

答えて

0

私は答えを自分で考え出し:

$xmldoc = new DOMDocument(); 
$xmldoc->load('test.xml'); 
foreach ($xmldoc->getElementsByTagName('marker') as $feeditem) { 
    if($feeditem->getAttribute('id')==$id){ 
     $sig=$feeditem->getAttribute('signal'); 
     $sig++; 
     $feeditem->setAttribute('signal',$sig); 
    } 


} 
$xmldoc->save('test.xml'); 
関連する問題