我希望来自这个了不起的社区的人能够帮助我。我对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>
在第二和第三种产品上,它没有更新库存文本,而是只是再次添加了一个称为库存的新属性并输入了文本-并在文件的其余部分中一直这样做。
如果有人可以帮助我,我将非常感谢。谢谢大家! 乔恩
答案 0 :(得分:1)
这仅仅是因为您将新值分配给STOCK
项目的方式上存在一些错误:
$PRODUCT->STOCK[$i]="instock";
您已将$i
设置为从0开始的递增数字(在第一次迭代中)。这会将 n STOCK
元素设置为instock
。但是,没有STOCK
元素大于0,因为在每种情况下STOCK
是PRODUCT
的唯一子元素。
之所以获得额外的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";
让我知道您是否仍然有问题。