kilylabs / upd-parser-php
XML格式УПД解析器、验证器和生成器
v0.2
2022-01-27 19:36 UTC
Requires
- guzzlehttp/guzzle: ^7.2
- spatie/array-to-xml: ^2.16
Requires (Dev)
- phpunit/phpunit: ^8.1
This package is auto-updated.
Last update: 2024-09-06 17:50:13 UTC
README
解析器、验证器和生成器,用于处理版本5.01.02+的UПД(通用传送文件)格式,适用于PHP 7.4+。
安装
推荐通过Composer安装
$ composer require kilylabs/upd-parser-php
使用方法
工作示例
<?php require __DIR__.'/vendor/autoload.php'; use Kily\Tools\Upd\Validator; use Kily\Tools\Upd\Parser; use Kily\Tools\Upd\Generator; use Kily\Tools\Upd\Upd; // Превратим XML в массив $arr = Parser::parseFile(__DIR__.'/examples/good_upd.xml'); var_export($arr); /* array ( 'СвУчДокОбор' => array ( 'СвОЭДОтпр' => array ( '@attributes' => array ( 'НаимОрг' => 'АО "ПФ "СКБ Контур"', 'ИННЮЛ' => '6663003127', 'ИдЭДО' => '2BM', ), ), '@attributes' => array ( 'ИдОтпр' => '2BM-771365132548--2016072812271194308390000000', 'ИдПол' => '2BM-7717801381-771701001-201701230806066030723', ), ... */ // Сгенерируем на основании массива новый XML $arr['СвУчДокОбор']['@attributes']['ИдПол'] = '2BM-7717801381-771701001-000000000000000'; $xml = Generator::generateString($arr); var_dump($xml); /* string(5159) "<?xml version="1.0" encoding="utf-8"?> <Файл ИдФайл="RL-NB-146830-MARK" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0"> <СвУчДокОбор ИдОтпр="2BM-771365132548--2016072812271194308390000000" ИдПол="2BM-7717801381-771701001-000000000000000"> <СвОЭДОтпр НаимОрг="АО "ПФ "СКБ Контур"" ИННЮЛ="6663003127" ИдЭДО="2BM"/> ... */ // Проверим получившийся XML на валидность $ret = Validator::validateString($xml,Upd::VER_5_01); var_dump($ret);
验证示例
<?php require __DIR__.'/vendor/autoload.php'; use Kily\Tools\Upd\Validator; use Kily\Tools\Upd\Upd; echo 'Производим валидацию файла по последней версии 5.01 (5.01.03): '; if (!Validator::validateFile(__DIR__.'/examples/good_upd.xml', Upd::VER_5_01)) { echo "ERROR "; print_r(Validator::getLastValidationErrors()); } else { echo "OK\n"; } echo 'Производим валидацию файла по версии 5.01.02 (выдаст ошибку): '; if (!Validator::validateFile(__DIR__.'/examples/good_upd.xml', Upd::VER_5_01_02)) { echo "ERROR "; print_r(Validator::getLastValidationErrors()); } else { echo "OK\n"; } echo 'Производим валидацию файла по версии 5.01.03: '; if (!Validator::validateFile(__DIR__.'/examples/good_upd.xml', Upd::VER_5_01_03)) { echo "ERROR "; print_r(Validator::getLastValidationErrors()); } else { echo "OK\n"; } echo 'Производим валидацию файла с кодами маркировки Честный Знак: '; if (!Validator::validateFile(__DIR__.'/examples/good_upd_with_km.xml', Upd::VER_5_01)) { echo "ERROR "; print_r(Validator::getLastValidationErrors()); } else { echo "OK\n"; } echo 'Производим валидацию XML из строки: '; $xml = file_get_contents(__DIR__.'/examples/good_upd_with_km.xml'); if (!Validator::validateString($xml, Upd::VER_5_01)) { echo "ERROR "; print_r(Validator::getLastValidationErrors()); } else { echo "OK\n"; }
解析示例
<?php require __DIR__.'/vendor/autoload.php'; use Kily\Tools\Upd\Parser; use Kily\Tools\Upd\Exception\ValidationException; use Kily\Tools\Upd\Upd; // Парсим файл $arr = Parser::parseFile(__DIR__.'/examples/good_upd.xml'); var_export($arr); /* array ( 'СвУчДокОбор' => array ( 'СвОЭДОтпр' => array ( '@attributes' => array ( 'НаимОрг' => 'АО "ПФ "СКБ Контур"', 'ИННЮЛ' => '6663003127', 'ИдЭДО' => '2BM', ), ), '@attributes' => array ( 'ИдОтпр' => '2BM-771365132548--2016072812271194308390000000', 'ИдПол' => '2BM-7717801381-771701001-201701230806066030723', ), ... */ // Парсим файл без валидации $arr = Parser::parseFile(__DIR__.'/examples/good_upd.xml', false); var_export($arr); // Парсим файл с валидацией по определенной версии try { $arr = Parser::parseFile(__DIR__.'/examples/good_upd.xml', true, Upd::VER_5_01_02); var_export($arr); } catch(ValidationException $e) { echo $e->getMessage(); } // Парсим строку $xml = file_get_contents(__DIR__.'/examples/good_upd.xml'); $arr = Parser::parseString($xml);
生成器示例
<?php require __DIR__.'/vendor/autoload.php'; use Kily\Tools\Upd\Parser; use Kily\Tools\Upd\Generator; use Kily\Tools\Upd\Upd; // Распарсим XML нормального файла $arr = Parser::parseFile(__DIR__.'/examples/good_upd.xml', false); /* array ( 'СвУчДокОбор' => array ( 'СвОЭДОтпр' => array ( '@attributes' => array ( 'НаимОрг' => 'АО "ПФ "СКБ Контур"', 'ИННЮЛ' => '6663003127', 'ИдЭДО' => '2BM', ), ), '@attributes' => array ( 'ИдОтпр' => '2BM-771365132548--2016072812271194308390000000', 'ИдПол' => '2BM-7717801381-771701001-201701230806066030723', ), ... */ // Изменим один из атрибутов $arr['СвУчДокОбор']['@attributes']['ИдПол'] = '2BM-7717801381-771701001-000000000000000'; // Сгенерируем новый XML в строку $xml = Generator::generateString($arr); var_dump($xml); /* string(5159) "<?xml version="1.0" encoding="utf-8"?> <Файл ИдФайл="RL-NB-146830-MARK" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0"> <СвУчДокОбор ИдОтпр="2BM-771365132548--2016072812271194308390000000" ИдПол="2BM-7717801381-771701001-000000000000000"> <СвОЭДОтпр НаимОрг="АО "ПФ "СКБ Контур"" ИННЮЛ="6663003127" ИдЭДО="2BM"/> ... */ // Сгенерируем новый XML в файл $file = tempnam(sys_get_temp_dir(),'upd_'); $xml = Generator::generateFile($arr,$file);
待办事项
- 解析和生成时不要使用数组(#1)
- 编写规范文档