2015-10-20 2 views
0

Я пытаюсь обновить один конкретный узел в уже существующем XML-файле с php. Проблема, с которой я сталкиваюсь, заключается в том, что она, похоже, не сохраняется в xml-файле. Не уверен, почему и любая помощь здесь будут оценены!PHP: Обновление XML из PHP и сохранение

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

Awesome. Спасибо, что освободили меня! – WonderfulWonder

1

Chmod папку, в которой вы хотите сохранить файл XML: набор разрешений для maxiamally 775.

Если это не работает, попробуйте с помощью Curl

1

Я просто закодированы что-то подобное, и нашел что $ doc-> saveXML() просто создает исходящую строку xml. Я добавил file_put_contents для записи в XML-файл и работал нормально.

file_put_contents($xmlFile, $doc->saveXML());
Смежные вопросы