XML解析和生成库

v5.0.2 2021-01-25 07:01 UTC

This package is auto-updated.

Last update: 2024-09-25 15:01:15 UTC


README

使用简单的映射将XML解析为PHP数组。它允许您解析简单的数据,如字符串和数字、数组或项目列表,以及复杂的数据,如对象。还允许这些数据类型的任何组合。

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

安装

最简单的安装模块方法是使用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的启发,创建了此库