larafull/ymlparser

Laravel 的 YML (Yandex XML 格式) 解析器

v1.2.0 2018-10-03 12:42 UTC

This package is not auto-updated.

Last update: 2024-09-27 15:13:04 UTC


README

适用于 Laravel 5.5+ 的针对 yml(yandex.market.ru) 文件的解析器。

https://github.com/serkin/ymlparser 分支而来

感谢 Serkin Alexander!

YMLParser 默认包含两个针对不同文件大小的驱动程序

  • XMLReader - 用于中等和大型 XML 文件
  • SimpleXML - 用于小型 XML 文件

Laravel YML 解析注意事项

当前步骤不需要 Laravel,但此软件包的开发正在进行中。

安装

软件包需要 php-xmlrpc 和 php-mbstring

sudo apt-get install php-xmlrpc php-mbstring

通过 Composer 需求包

composer require larafull/ymlparser:dev-master

使用方法

Laravel 等中的远程 YML 解析

自 v1.2 版本起,提供远程解析功能

use YMLParser\YMLParser;
use YMLParser\Driver\XMLReader;


$url = 'https://somedomain/somefolder/somefile.yml.xml';

$parser = new YMLParser(new XMLReader);

$parser->open($url);

$offers = $parsers->getOffers(); // etc

从文件中获取所有报价

use YMLParser\YMLParser;
use YMLParser\Driver\XMLReader;

$filename = '/path/to/file/file.xml';

//   User XMLReader driver large xml files or SimpleXML driver for small xml files.

$parser = new YMLParser(new XMLReader);
$parser->open($filename); // throws \Exception if $filename doesn't exist or empty
foreach($parser->getOffers() as $offer): // YMLParser::getOffers() returns \Generator
    echo $offer['url'];
endforeach;

使用过滤器进行报价

YMLParser::getOffers() 可以接受一个过滤器函数作为参数。过滤器应该是一个返回 true 或 false 的匿名函数

use YMLParser\YMLParser;
use YMLParser\Driver\SimpleXML;

$filename = '/path/to/file/file.xml';

$parser = new YMLParser(new SimpleXML);
$parser->open($filename);

// Anonnymous filter function example:

$filter = function($element) {
    return !empty($element['url']);
}; 

$offers = iterator_to_array($parser->getOffers($filter));

// Let's dump first offer via Laravel dump():

dump($offers[0]['params']);

依赖项

  • PHP: >= 7.1
  • xmlrpc 扩展
  • mbstring 扩展

分支后的修改

DriverInterface 可以更改。为了检查能力,将添加静态变量。

创建从 YML 创建模型的迁移将在以后提供。

贡献和你的想法

创建拉取请求或/和在这里发消息

Telegram: @vvmspace

Twitter: @vvmspace

VK: https://vk.com/it007

Instagram: https://instagram.com/insta.tagil

电子邮件: vvmspace@gmail.com