cdekok / xml-transform
XML转数组转换器
1.1.3
2017-01-02 15:02 UTC
Requires
- php: ^7.0
- lib-libxml: *
Requires (Dev)
- phpro/grumphp: ^0.9.6
- phpunit/phpunit: ^5.6
- satooshi/php-coveralls: ^1.0
- squizlabs/php_codesniffer: ^2.7
README
PHP XML转换库
这个库将xml值映射到数组值,使用xpath查询,非常有用。
安装
composer require cdekok/xml-transform
用法
数据列表
// Optional add namespaces in the XML $namespaces = ['oai' => 'http://www.openarchives.org/OAI/2.0/']; // Define the mapping for the array that you want to have filled $mapping = [ 'id' => [ 'xpath' => './/oai:identifier/text()' ], 'material' => [ 'xpath' => './/oai:material/text()', 'repeatable' => true // If elements are repeatable set this option so an array will be returned ], ]; $data = (new \XmlTransform\Mapper($mapping, '//oai:OAI-PMH/oai:ListRecords/oai:record', $namespaces)) ->from('somefile.xml') ->transform(); // $data will contain something like [ ['id' => '12', 'material' => ['paint', 'pencil']], ['id' => '13', 'material' => ['pen', 'pencil']], ]
单个数组
为了方便,也可以只映射到一个数组,而不是结果列表。
$data = (new \XmlTransform\Mapper($mapping, '//oai:OAI-PMH/oai:ListRecords/oai:record', $namespaces)) ->from('somefile.xml') ->transformOne(); // $data will contain something like ['id' => '12', 'material' => ['paint', 'pencil']]
可重复嵌套元素
$mapping = [ 'id' => ['xpath' => './/oai:objectid/text()'], 'creator' => [ 'repeatable' => true, // Mark the element as repeatable 'context' => './/oai:constituent', // new context for the nested elements 'values' => [ 'name' => ['xpath' => './/text()'], 'death_date' => ['xpath' => './/@death_date'], ] ] ]; $transformer = new \XmlTransform\Mapper($mapping, '//oai:record', $namespaces); $result = $transformer->from($xml)->transformOne(); // Result will contain something like this [ 'id' => '3517', 'creator' => [ ['name' => 'Rembrandt', 'death_date' => '1669'], ['name' => 'Johannes Mock', 'death_date' => '1884'], ['name' => 'Georg Friedrich Schmidt', 'death_date' => '1775'], ] ]
过滤值
从返回的数组中过滤空值
$transformer->from($xml)->filter()->transform();
可选元素(上下文)
如果XML中有上下文的可选元素,您需要启用可选设置以防止ContextNotFoundException
$mapping = [ 'record' => [ 'context' => './/data', 'values' => [ 'title' => ['xpath' => './/title/text()'], 'creator' => ['xpath' => './/creator/text()'], // optional ] ], ]; $transformer = new \XmlTransform\Mapper($mapping, '//record'); $result = $transformer->from($xml)->optionalElements()->filter()->transform(); // Result creator is missing. [ 'record' => [ 'title' => 'test', 'creator' => 'Bert', ], ], [ 'record' => [ 'title' => 'test 2', ] ]
开发
运行 composer install
后,grumphp会在提交前监视代码风格和单元测试。
要手动检查代码风格/单元测试,请运行 composer run test
要自动格式化代码,请运行 composer run format
要生成测试覆盖率,请运行 composer run report
该项目遵循git flow进行提交