digitalkaoz / xml-filter
从XML文档中过滤数据
1.0
2016-10-02 21:39 UTC
Requires
- php: >=7.0
- pimple/pimple: ^3.0
- symfony/console: ^2.8 | ^3.0
- symfony/options-resolver: ^2.8 | ^3.0
- symfony/var-dumper: ^2.8 | ^3.0
- symfony/yaml: ^2.8 | ^3.0
- webmozart/assert: ^1.0
Requires (Dev)
- phpspec/phpspec: ^3.0
- phpspec/prophecy: ^1.6
This package is not auto-updated.
Last update: 2024-09-14 20:04:01 UTC
README
这个库允许您将复杂的结构数据从XML文档中过滤到一些数组结构(嵌套数组、映射、字符串等)。
- 它能够使用不同的XML后端(例如
\SimpleXml*
或\Dom*
,甚至是您自己的后端) - 它支持类型转换、排序、验证、引用检查、条件包含、后处理、合并、聚合等...
- 它可扩展(它在幕后使用Pimple),因此您可以提供自己的过滤器,或者几乎覆盖每个部分
安装
$ composer install
示例
假设我有以下XML文档
<doc> <foo>foo</foo> <bar>20</bar> <bar>30</bar> <bar>10</bar> </doc>
当使用以下配置(使用
Yaml
加载器)时
Rs\XmlFilter\Filter\AggregateFilter: mappings: bazz: filter: Rs\XmlFilter\Filter\AggregateFilter mappings: foo: "/doc/foo" bar: path: "/doc/bar" cast: "int" sort: true multiple: true
我想要过滤后得到以下数组
[ 'bazz' => [ 'foo' => 'foo', ], 'bar' => [10, 20, 30] ]
解析RSS源
Rs\XmlFilter\Filter\MapFilter: basePath: //channel/item key: ./guid value: filter: Rs\XmlFilter\Filter\AggregateFilter mappings: title: ./title link: ./link category: ./category date: ./pubDate text: filter: Rs\XmlFilter\Filter\PostFilter callable: strip_tags real_filter: filter: Rs\XmlFilter\Filter\ScalarFilter path: ./description
$filter = \Rs\XmlFilter\XmlFilter::create(); $doc = $filter::load(file_get_contents('https://news.google.de/?output=rss')); $config = new \Rs\XmlFilter\Loader\YamlLoader(__DIR__ . '/rss.yml'); $result = $filter->filter($doc, $config); echo json_encode($result, JSON_PRETTY_PRINT);
用法
PHAR
要构建PHAR,只需运行
$ composer build
测试
$ composer test-all