php - 使用 PHP 更新 XML 文件
问题描述
我希望来自这个了不起的社区的人可以帮助我。我在 PHP 方面并不出色,我在网上找到了一个更新 XML 文件的脚本——它确实有效,因为它执行了 xml 文件中的第一个元素,然后将文件的其余部分弄乱了.
我的供应商向我发送了一个包含更新的库存水平的 XML 文件,但我需要更改文件中的文本。
股票.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>
我需要将 In Stock 更改为 instock 这是我发现的 PHP 代码:
更新库存.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());
?>
我最终得到这个结果:
股票.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 和第 3 个产品上,它没有更新库存文本,而是再次添加了一个名为 stock 的新属性并输入了文本 - 它一直在文件的其余部分执行此操作。
如果有人可以帮助我,我将不胜感激。谢谢大家!乔恩
解决方案
This is just because of a slight error with the way you are assigning the new values to your STOCK
item:
$PRODUCT->STOCK[$i]="instock";
You have set $i
as an increasing number from 0 (on the first iteration). This will set the nth STOCK
element to be instock
. However, there are no STOCK
elements higher than 0 because STOCK
is the only child of PRODUCT
in each case.
The reason you were getting extra STOCK
elements was because they were being created when $i
was higher than 0 (STOCK[1] = "instock"
, STOCK[2] = "instock"
, etc.).
Simply remove $i
completely and use 0
and it will work:
$PRODUCT->STOCK[0]="instock";
Output:
<?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>
推荐阅读
- python - 带边界的 ScatterLayout
- c# - 如何使玩家相对于相机移动?
- android - 什么是 Widget.AppCompat.Light.ActionBar.Solid.Inverse?
- javascript - 如何使用javascript将具有给定类的每个元素的字体缩放到其父尺寸?
- sql - 在 birt 报告中显示数据
- java - 有没有办法使用java在android中将docx转换为pdf?
- python - 如何从包含另一个列表中的关键字的嵌套列表中找到所有列表
- react-native - 反应原生选择器数据集更改时如何修复崩溃
- ruby-on-rails - 为什么`a.is_a?数组 && !a.empty?` 引发 NoMethodError?
- unicode - 使用 ICU 消息语法时,复数 `offset` 参数是否应该被代码替换?