idevman / xml-mapper
用于将XML映射到映射数组
v2.0.1
2020-03-29 21:34 UTC
Requires
- illuminate/support: ^6.2|^7.0
Requires (Dev)
- orchestra/testbench: ^4.4
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-09-29 05:01:11 UTC
README
使用别名从MAP创建XML数据映射数组作为Laravel插件。
安装
依赖项
- Laravel 6.2+ (v2.0.0)
- Laravel 5.5+ (v1.0.4)
安装
- 通过Composer安装包
composer require idevman/xml-mapper
Laravel 5.5+
Laravel 5.5+ 会自动发现包,对于旧版本,请添加以下服务提供者
Idevman\XmlMapper\XmlMapperServiceProvider::class,
和别名
'XmlMapper' => 'Idevman\XmlMapper\Support\Facades\XmlMapper',
用法
要使用它,假设以下xml内容
<note from="Tove" to="Jani"> <content heading="Reminder" body="Don\'t forget me this weekend!"/> <raw>Simple text</raw> <item number="1" value="50">Table</item> <item number="2" value="40">Chair</item> <item number="3" value="30">Door</item> <item number="4" value="60">Window</item> </note>
因此,将其加载到 $xml 变量中,并按如下方式调用
$response = XmlMapper::mapTo([ 'from' => '/note@from', 'to' => '/note@to', 'heading' => '/note/content@heading', 'body' => '/note/content@body', 'raw' => '/note/raw', 'simpleItem' => '/note/item', 'simpleItemNumber' => '/note/item@number', 'allItems' => '/note/item[]', 'allItemsNumber' => '/note/item[]@number', ], $xml);
然后 $response 将包含
[ "from" => "Tove" "to" => "Jani" "heading" => "Reminder" "body" => "Don't forget me this weekend!" "raw" => "Simple text" "simpleItem" => "Table" "simpleItemNumber" => "1" "allItems" => [ 0 => "Table" 1 => "Chair" 2 => "Door" 3 => "Window" ] "allItemsNumber" => [ 0 => "1" 1 => "2" 2 => "3" 3 => "4" ] ]
分组属性节点
假设相同的XML并加载到 $xml 变量中,并按如下方式调用
$response = XmlMapper::mapTo([ 'addressing[from,to]' => '/note[@from,@to]', 'content[header,body]' => '/note/content[@heading,@body]', 'items[sequence,value]' => '/note/item[][@number,@value]', ], $xml);
然后 $response 将包含此结果
[ "addressing" => [ "from" => "Tove" "to" => "Jani" ] "content" => [ "header" => "Reminder" "body" => "Don't forget me this weekend!" ] "items" => [ [ "sequence" => "1" "value" => "50" ], [ "sequence" => "2" "value" => "40" ], [ "sequence" => "3" "value" => "30" ], [ "sequence" => "4" "value" => "60" ] ] ]
注意,标签更改根据键数组内容进行