XmlFilter
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, (*1)
, (*2)
Installation
$ composer install
Example
Given I Have the following XML Document, (*3)
<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), (*4)
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, (*5)
[
'bazz' => [
'foo' => 'foo',
],
'bar' => [10, 20, 30]
]
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, (*6)
$ composer build
Tests
$ composer test-all