2015-10-20 76 views
0

我想從PHP更新一個預先存在的xml文件中的特定節點。我遇到的問題是,它似乎沒有保存到XML文件。不知道爲什麼和任何幫助將不勝感激!PHP:從PHP更新XML和保存

<?php  
$itemNumber = $_GET["itemNumberField"]; 

$xmlFile = "items.xml"; 

if(file_exists($xmlFile)) 
{   

    // $doc = new DOMDocument('1.0'); 
    // $doc->load($xmlFile); 

    $doc = DOMDocument::load($xmlFile); 

    $item = $doc->getElementsByTagName("item"); 

    foreach($item as $node) 
    { 
     $itemNumberNode = $node->getElementsByTagName("itemNumber"); 
     $itemNumberNode = $itemNumberNode->item(0)->nodeValue; 

     $qtyNode = $node->getElementsByTagName("quantity"); 
     $qtyNode = $qtyNode->item(0)->nodeValue;     

     if ($itemNumberNode == $itemNumber) 
     { 
      $qtyNode++; 

      echo $qtyNode;     
     } 
    }   
} 

else 
{  
    echo "file doesn't exist! <br/>";  
} 

$doc->save($xmlFile); 

?> 

編輯:只是爲了澄清,添加到節點似乎很好。

解決方案:原來它沒有保存的原因是因爲添加節點。我不得不直接更新它或爲其分配更新的值。

$qtyNode = $node->getElementsByTagName("quantity"); 
$qtyNode = $qtyNode->item(0); 
... 
$qtyNode->nodeValue++; 
+1

你在哪裏試圖保存文件?本地或遠程? – YdB

+0

@bboni它在遠程服務器上。 – WonderfulWonder

回答

1

您將標量值(字符串)複製到變量中。然後你改變這個變量。

$qtyNode = $qtyNode->item(0)->nodeValue;     

    if ($itemNumberNode == $itemNumber) 
    { 
     $qtyNode++; 

     echo $qtyNode;     
    } 

$qtyNode不是DOMNode對象,而是一個字符串變量。

你將不得不到的DOMNode :: $ nodeValue屬性直接改變或變量分配給它。

$qtyNode = $qtyNode->item(0);     

    if ($itemNumberNode == $itemNumber) 
    { 
     $qtyNode->nodeValue++; 

     echo $qtyNode->nodeValue;     
    } 
+0

太棒了。謝謝你爲我清理這個! – WonderfulWonder

1

文件模式中,你要保存XML文件的文件夾:設置權限爲775 maxiamally

如果這不是問題,請嘗試使用curl

1

我剛剛編碼類似的東西,並發現out $ doc-> saveXML()只是構建了傳出的xml字符串。我添加了一個用於寫入xml文件的file_put_contents,並且工作正常。

file_put_contents($xmlFile, $doc->saveXML());