PHP:从PHP更新XML并保存

时间:2015-10-20 11:00:06

标签: php xml

我正在尝试从php中预先存在的xml文件中更新1个特定节点。我遇到的问题是它似乎没有保存到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++;

3 个答案:

答案 0 :(得分:1)

chmod要保存xml文件的文件夹:将权限设置为maxiamally 775。

如果这不起作用,请尝试使用Curl

答案 1 :(得分:1)

我刚编了类似的东西,发现$ doc-&gt; saveXML()只是构建了传出的xml字符串。我添加了一个file_put_contents来写入xml文件并且工作正常。

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

答案 2 :(得分: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;                  
    }