2017 © Pedro Peláez
 

library xml-filter

filter data out of xml documents

image

digitalkaoz/xml-filter

filter data out of xml documents

  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

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)

Build Status Dependency Status Scrutinizer Code Quality Code Coverage SensioLabsInsight Latest Stable Version Total Downloads StyleCI, (*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]
]

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, (*6)

$ composer build

Tests

$ composer test-all

The Versions