digitalkaoz / xml-filter
filter data out of xml documents
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-12-21 21:25:37 UTC
README
this library lets you filter complex Data-Structures out of XML Documents into some Array Structure (nested Arrays, Maps, Strings ...).
- It is capable of using different XML Backends (
\SimpleXml*
or\Dom*
or even your Own) - It has Support for Type-Casting, Sorting, Validation, Reference-Checking, Conditional-Inclusion, Post-Processing, Merging, Aggregating and ...
- It is extendable (it uses Pimple behind the curtain), so you can provide your own Filter, or override nearly every part
Installation
$ composer install
Example
Given I Have the following XML Document
<doc> <foo>foo</foo> <bar>20</bar> <bar>30</bar> <bar>10</bar> </doc>
When I use the following Configuration (while using the
Yaml
Loader)
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
I want to get the following Array after filtering
[ 'bazz' => [ 'foo' => 'foo', ], 'bar' => [10, 20, 30] ]
Parse a RSS Feed
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);
Usage
PHAR
to build a phar simply run
$ composer build
Tests
$ composer test-all