digitalkaoz/xml-filter

从XML文档中过滤数据

1.0 2016-10-02 21:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:04:01 UTC


README

这个库允许您将复杂的结构数据从XML文档中过滤到一些数组结构(嵌套数组、映射、字符串等)。

  • 它能够使用不同的XML后端(例如 \SimpleXml*\Dom*,甚至是您自己的后端)
  • 它支持类型转换、排序、验证、引用检查、条件包含、后处理、合并、聚合等...
  • 它可扩展(它在幕后使用Pimple),因此您可以提供自己的过滤器,或者几乎覆盖每个部分

Build Status Dependency Status Scrutinizer Code Quality Code Coverage SensioLabsInsight Latest Stable Version Total Downloads StyleCI

安装

$ 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