PHP:从PHP更新XML和保存
问题描述:
我想从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++;
答
您将标量值(字符串)复制到变量中。然后你改变这个变量。
$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
答
文件模式中,你要保存XML文件的文件夹:设置权限为775 maxiamally
如果这不是问题,请尝试使用curl
答
我刚刚编码类似的东西,并发现out $ doc-> saveXML()只是构建了传出的xml字符串。我添加了一个用于写入xml文件的file_put_contents,并且工作正常。
file_put_contents($xmlFile, $doc->saveXML());
你在哪里试图保存文件?本地或远程? – YdB
@bboni它在远程服务器上。 – WonderfulWonder