sirian/yandex-market-language-parser
Composer 安装命令:
composer require sirian/yandex-market-language-parser
包简介
Yandex Market Language parser
README 文档
README
Streaming parser for Yandex Market Language (YML) feeds.
Uses XMLReader for the outer scan and SimpleXMLElement for per-offer parsing, so the whole catalog is never loaded in memory — offers arrive as a Generator.
Requirements
- PHP >= 8.3
- Extensions:
ext-mbstring,ext-simplexml,ext-xmlreader,ext-libxml
Installation
composer require sirian/yandex-market-language-parser
Usage
use Sirian\YMLParser\Parser; $parser = new Parser(); $result = $parser->parse('/path/to/catalog.xml'); $shop = $result->getShop(); echo $shop->getName(); foreach ($shop->getCategories() as $category) { echo $category->getId(), ': ', $category->getName(), "\n"; } foreach ($result->getOffers() as $offer) { echo $offer->getId(), ' — ', $offer->getName(), "\n"; }
Offer types
Sirian\YMLParser\Factory\Factory::createOffer() returns:
type attribute |
class |
|---|---|
vendor.model |
Sirian\YMLParser\Model\Offer\VendorModelOffer |
book |
Sirian\YMLParser\Model\Offer\BookOffer |
| anything else | Sirian\YMLParser\Model\Offer\Offer |
| absent | Sirian\YMLParser\Model\Offer\VendorModelOffer (default) |
Customization
Provide a custom FactoryInterface to swap any model/storage implementation:
use Sirian\YMLParser\Factory\Factory; use Sirian\YMLParser\Model\Offer\Offer; use Sirian\YMLParser\Parser; $factory = new class () extends Factory { public function createOffer(string $type): Offer { // return your own subclass return parent::createOffer($type); } }; $parser = new Parser($factory);
Extending offer field mapping
Offer::applyField(string $field, string $value): bool maps XML child elements onto setters. Override it in your own offer subclass to handle YML fields beyond the built-in ones:
final class MyOffer extends VendorModelOffer { public function applyField(string $field, string $value): bool { if ('country_of_origin' === $field) { $this->country = $value; return true; } return parent::applyField($field, $value); } }
Any field can also be accessed via the raw XML — $offer->getXml() / $shop->getXml().
Development
composer install vendor/bin/phpunit # tests + coverage vendor/bin/phpstan analyse # static analysis (level 8) vendor/bin/php-cs-fixer fix --dry-run --diff # code style
License
MIT
sirian/yandex-market-language-parser 适用场景与选型建议
sirian/yandex-market-language-parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 46.55k 次下载、GitHub Stars 达 18, 最近一次更新时间为 2013 年 09 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 sirian/yandex-market-language-parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 sirian/yandex-market-language-parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 46.55k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 18
- 点击次数: 23
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2013-09-26