sergeynezbritskiy / xml-io
XML解析和生成库
v5.0.2
2021-01-25 07:01 UTC
Requires
- php: ^7.0|^8.0
- ext-dom: *
- ext-simplexml: *
Requires (Dev)
- phpunit/phpunit: ^6.5
README
使用简单的映射将XML解析为PHP数组。它允许您解析简单的数据,如字符串和数字、数组或项目列表,以及复杂的数据,如对象。还允许这些数据类型的任何组合。
安装
最简单的安装模块方法是使用Composer
composer require sergeynezbritskiy/xml-io:^5.0.0
简单用法
最有用的测试案例可以在测试中看到
以下是一个最通用的示例。假设我们有一个如下所示的XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <user id="1"> <name>Sergey</name> <born format="ISO">1988-20-12</born> <passport id="MN123456"> <date>2000-12-12</date> </passport> <keywords> <keyword>buono</keyword> <keyword>brutto</keyword> <keyword>cattivo</keyword> </keywords> <addresses> <address> <city>Kharkiv</city> <country>Ukraine</country> </address> <address> <city>London</city> <country>Great Britain</country> </address> </addresses> </user>
以下是如何将此类XML转换为数组的示例
$xmlString = ' xml string from above '; $xmlReader = new \SergeyNezbritskiy\XmlIo\XmlReader(); $user = $xmlReader->stringToArray($xmlString, [ //array element with key `id` will be created from attribute `id` 'id' => '@id', //array element with key `name` will be created from tag `name` 'name' => 'name', 'born' => 'born', 'born_format' => 'born.@format', 'passport' => [ 'id' => '@id', 'date' => 'date', ], //create simple list of items 'keywords as keywords.keyword' => '{list}', //create element `addresses` which will be an array of associative arrays 'addresses as addresses.address[]' => [ 'city' => 'city', 'country' => 'country', ] ]); the result will be smth like that: $user = [ 'id' => '1', 'name' => 'Sergey', 'born' => '1988-20-12', 'born_format' => 'ISO', 'passport' => [ 'id' => 'MN123456', 'date' => '2000-12-12', ], 'keywords' => [ 'buono', 'brutto', 'cattivo' ], 'addresses' => [ [ 'city' => 'Kharkiv', 'country' => 'Ukraine' ],[ 'city' => 'London', 'country' => 'Great Britain' ], ] ]; and back, convert array to xml $xmlWriter = new \SergeyNezbritskiy\XmlIo\XmlWriter(); $xml = $xmlWriter->toXmlString($user, 'user' => [ 'attributes' => ['id'], 'children' => [ 'name', 'born', 'passport' => [ 'attributes' => ['id'], 'children' => 'date', ], 'keywords' => [ 'children' => [ 'keyword[]' => [ 'dataProvider' => 'keywords', 'text' => '{self}', ], ], ], 'addresses' => [ 'children' => [ 'address[]' => [ 'dataProvider' => 'addresses', 'children' => ['city', 'country'], ], ], ], ], ]);
灵感
作者受到https://github.com/laravie/parser的启发,创建了此库