php - 在循环中过滤产品集合并检索库存数量
问题描述
我正在尝试编写一个库存导入脚本来从远程 XML 提要更新库存,但我无法过滤我的产品集合以获取当前的库存数量。
我在提要中没有产品 ID 或 SKU,但有产品属性,所有这些属性结合起来会找到唯一的产品记录,因此我不得不使用它们来过滤我的收藏。
这是 XML 提要的示例
<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS>
<PRODUCT ITEM="786766786">
<STOCK>8</STOCK>
</PRODUCT>
<PRODUCT ITEM="766766867">
<STOCK>0</STOCK>
</PRODUCT>
<PRODUCT ITEM="768767868">
<STOCK Size="S/M" Color="White">2</STOCK>
<STOCK Size="M/L" Color="White">2</STOCK>
<STOCK Size="S/M" Color="Black">2</STOCK>
<STOCK Size="M/L" Color="Black">2</STOCK>
</PRODUCT>
<PRODUCT ITEM="897897897">
<STOCK>2</STOCK>
</PRODUCT>
</STOREITEMS>
因此,在示例中检索独特产品所需的属性将是“item”、“size”和“color”。
到目前为止我的代码看起来像这样
libxml_use_internal_errors(true);
$products = Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
$xmldata = simplexml_load_file($remotefeed);
foreach ($xmldata->children() as $product) {
$products->addFieldToFilter('item', strtolower($product['ITEM']));
foreach ($product->STOCK as $feedQty) {
$atts = $feedQty->attributes();
if (!empty($atts)) {
foreach ($atts as $key => $value) {
$products->addFieldToFilter(strtolower($key), strtolower($value));
}
}
$product = $products->load()->getFirstItem();
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
$stockItem->setQty($feedQty);
$stockItem->save();
}
}
正如我所说,我无法过滤产品集合并获得当前库存 - $mageQty 根本没有返回任何东西。
我知道我很可能在这里犯了几个错误,但到目前为止还没有在网上找到任何有帮助的指导 - 谁能告诉我我哪里出错了?
解决方案
我不完全清楚您要做什么,但是如果其中一部分是从每个<STOCK>
节点中提取文本值,则以下内容会将它们提取到一个数组中,您以后可以将其用于任何目的。
由于您正在处理 xml,因此 xpath 是提取数据的最佳方式:
$string = <<<XML
//[your xml above]
XML;
$xml = simplexml_load_string($string);
$stocks = $xml->xpath("//PRODUCT/STOCK//text()");
foreach ($stocks as $stock) {
echo $stock , ' ';}
输出:
8 0 2 2 2 2 2
推荐阅读
- angular - 如何将值从一个函数访问到另一个函数
- amazon-web-services - 无服务器 - 运行 sls deploy 时无法读取未定义错误的属性“startsWith”
- javascript - 上传文件时 v-file-input 显示 2 名称
- openid-connect - AzureADB2C AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配
- java - 数组值与索引总和的最大绝对差
- google-apps-script - 您如何将公司徽标添加到谷歌网络应用程序?
- mongodb - MongoDb 获取子集而不是整个记录
- javascript - useAnimationOnDidUpdate 反应钩子实现
- python - 将字符串转换为二维 numpy 数组
- python - 表中的多个表头以及如何从表行中抓取数据
我正在尝试从网站上抓取数据,但该表有两组数据,首先,2-3 行数据在 thead 中,其余在 tbody 中。当我尝试这两种方法时,我可以轻松地一次只从一个中提取数据,但我遇到了一些错误,例如 TypeError、AttributeError。顺便说一句,我正在使用 python 这里是代码
import requests from bs4 import BeautifulSoup import pa