我正在尝试从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++;
答案 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;
}