使用PHP更新XML文件

时间:2019-10-02 10:49:41

标签: php xml

我希望来自这个了不起的社区的人能够帮助我。我对PHP并不精明,我在网上找到了一个脚本来更新XML文件-从某种意义上说,它可以处理xml文件中的第一个元素,然后将文件的其余部分弄乱了

我的供应商向我发送了一个具有更新库存水平的XML文件,但是我需要更改文件中的文本。

stock.xml

<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS>
    <PRODUCT ITEM="1234" NAME="Product Number One">
        <STOCK>In Stock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="2345" NAME="Product Number Two">
        <STOCK>In Stock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="3456" NAME="Product Number Three">
        <STOCK>In Stock</STOCK>
    </PRODUCT>
</STOREITEMS>

我需要将库存更改为库存 这是我发现要做的PHP代码:

updatestock.php

<?php   
    $xml1=simplexml_load_file('stock.xml');

    $i=-1;
    foreach($xml1->children() as $PRODUCT)
    {
    $i=$i+1;
        $STOCK=$PRODUCT->STOCK;

        if($STOCK=="In Stock")
        {
            $PRODUCT->STOCK[$i]="instock";
        }
    }

    file_put_contents("stock.xml",$xml1->saveXML());

?>

我最终得到以下结果:

stock.xml

<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS>
    <PRODUCT ITEM="1234" NAME="Product Number One">
        <STOCK>In Stock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="2345" NAME="Product Number Two">
        <STOCK>In Stock</STOCK><STOCK>instock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="3456" NAME="Product Number Three">
        <STOCK>In Stock</STOCK><STOCK>instock</STOCK>
    </PRODUCT>
</STOREITEMS>

在第二和第三种产品上,它没有更新库存文本,而是只是再次添加了一个称为库存的新属性并输入了文本-并在文件的其余部分中一直这样做。

如果有人可以帮助我,我将非常感谢。谢谢大家! 乔恩

2 个答案:

答案 0 :(得分:1)

这仅仅是因为您将新值分配给STOCK项目的方式上存在一些错误:

$PRODUCT->STOCK[$i]="instock";

您已将$i设置为从0开始的递增数字(在第一次迭代中)。这会将 n STOCK元素设置为instock。但是,没有STOCK元素大于0,因为在每种情况下STOCKPRODUCT的唯一子元素。

之所以获得额外的STOCK元素,是因为它们是在$i大于0(STOCK[1] = "instock"STOCK[2] = "instock"等)时创建的。

只需完全删除$i并使用0,它将起作用:

$PRODUCT->STOCK[0]="instock";

输出:

<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS>
    <PRODUCT ITEM="1234" NAME="Product Number One">
        <STOCK>instock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="2345" NAME="Product Number Two">
        <STOCK>instock</STOCK>
    </PRODUCT>
    <PRODUCT ITEM="3456" NAME="Product Number Three">
        <STOCK>instock</STOCK>
    </PRODUCT>
</STOREITEMS>

答案 1 :(得分:0)

这是正确的方法。我已经测试了我的代码及其工作方式。

$xml=simplexml_load_file("stock.xml") or die("Error: Cannot create object");
foreach($xml->children() as $data) {         
 echo $data->STOCK . "<br>"; 

if($data->STOCK =='In Stock'){
$data->STOCK='instock';
//htmlentities($xml->save('stock.xml'));
file_put_contents("stock.xml",$xml->saveXML());

}    
} 

echo "success";

让我知道您是否仍然有问题。