阅读xml内容并使用php添加一些数字

阅读xml内容并使用php添加一些数字,php,xml,Php,Xml,我有一个xml文件,但通过php我只想对某些产品进行一些更改(每个项目都有自己的id)。 让我更好地解释一些产品,我想将运费与价格相加,并将物品使用网格从1放到0 <Products> <Product> <sku>35</sku> <sku_manufacturer>test sku</sku_manufacturer> <manufacturer>test manufacturer

我有一个xml文件,但通过php我只想对某些产品进行一些更改(每个项目都有自己的id)。 让我更好地解释一些产品,我想将运费与价格相加,并将物品使用网格从1放到0

<Products>
  <Product>
    <sku>35</sku>
    <sku_manufacturer>test sku</sku_manufacturer>
    <manufacturer>test manufacturer</manufacturer>
    <ean>800000000000</ean>
    <title><![CDATA[title test]]></title>
    <description><![CDATA[description</description>
    <product_price_vat_inc>8.08</product_price_vat_inc>
    <shipping_price_vat_inc>4.99</shipping_price_vat_inc>
    <quantity>2842</quantity>
    <brand><![CDATA[Finder]]></brand>
    <merchant_category><![CDATA[Home/test category]]></merchant_category>
    <product_url><![CDATA[https://www.example.com]]></product_url>
    <image_1><![CDATA[https://www.example.com]]></image_1>
    <image_2><![CDATA[]]></image_2>
    <image_3><![CDATA[]]></image_3>
    <image_4><![CDATA[]]></image_4>
    <image_5><![CDATA[]]></image_5>
    <retail_price_vat_inc/>
    <product_vat_rate>22</product_vat_rate>
    <shipping_vat_rate>22</shipping_vat_rate>
    <manufacturer_pdf/>
    <ParentSKU/>
    <parent_title/>
    <Cross_Sell_Sku/>
    <ManufacturerWarrantyTime/>
    <use_grid>1</use_grid>
    <carrier>DHL</carrier>
    <shipping_time>2#3</shipping_time>
    <carrier_grid_1>DHL</carrier_grid_1>
    <shipping_time_carrier_grid_1>2#3</shipping_time_carrier_grid_1>
    <carrier_grid_2/>
    <shipping_time_carrier_grid_2/>
    <carrier_grid_3/>
    <shipping_time_carrier_grid_3/>
    <carrier_grid_4/>
    <shipping_time_carrier_grid_4/>
    <carrier_grid_5/>
    <shipping_time_carrier_grid_5/>
    <DisplayWeight>0.050000</DisplayWeight>
    <free_return/>
    <min_quantity>1</min_quantity>
    <increment>1</increment>
    <sales>0</sales>
    <eco_participation>0</eco_participation>
    <shipping_price_supplement_vat_inc>0</shipping_price_supplement_vat_inc>
    <Unit_count>-1.000000</Unit_count>
    <Unit_count_type/>
  </Product>
</Products>

35
测试sku
测试制造商
800000000000
8.08
4.99
2842
22
22
1.
敦豪环球速递公司
2#3
敦豪环球速递公司
2#3
0.050000
1.
1.
0
0
0
-1.000000

您的XML有点大,因此让我们将其剥离出来作为示例:

$xmlString = <<<'XML'
<Products>
  <Product>
    <sku>35</sku>
    <title><![CDATA[title test]]></title>
    <use_grid>1</use_grid>
  </Product>
  <Product>
    <sku>42</sku>
    <title><![CDATA[title test two]]></title>
    <use_grid>1</use_grid>
  </Product>
</Products>
XML;
输出:

string(2) "35"
string(10) "title test"
string(1) "1"


<?xml version="1.0"?>
<Products>
  <Product>
    <sku>35</sku>
    <title><![CDATA[title test]]></title>
    <use_grid>0</use_grid>
  </Product>
  <Product>
    <sku>42</sku>
    <title><![CDATA[title test two]]></title>
    <use_grid>1</use_grid>
  </Product>
</Products>
字符串(2)“35”
字符串(10)“标题测试”
字符串(1)“1”
35
0
42
1.
Xpath::evaluate()
Xpath::evaluate()
使用Xpath表达式获取节点。结果类型取决于表达式。类似于
//Product[sku=“35”]
的位置路径将返回节点列表(
DOMNodeList
)。但是中的Xpath函数可以返回标量值-
字符串(sku)
将以字符串或空字符串的形式返回第一个
sku
子节点的文本内容

DOMNode::$textContent 读取
$node->textContent
将返回节点内的所有文本,包括子元素内的文本


在处理转义的同时,写入它会替换内容。

谢谢,它工作得很好。我想问你最后一件事,因为我必须编辑几个sku,为了避免写入太多行,是否可以使用csv文件,在第一列中输入sku,在第二列中输入要更改的值?
string(2) "35"
string(10) "title test"
string(1) "1"


<?xml version="1.0"?>
<Products>
  <Product>
    <sku>35</sku>
    <title><![CDATA[title test]]></title>
    <use_grid>0</use_grid>
  </Product>
  <Product>
    <sku>42</sku>
    <title><![CDATA[title test two]]></title>
    <use_grid>1</use_grid>
  </Product>
</Products>