vaclavvanik / dom-to-array
将 DOM Document 转换为 PHP 数组的一种简单方法
1.0.0
2023-10-31 10:06 UTC
Requires
- php: ^7.3 || ^8.0
- ext-dom: *
This package is auto-updated.
Last update: 2024-09-30 01:16:33 UTC
README
此软件包提供了一种将 DOMDocument 转换为 PHP 数组的简单方法。
DomToArray 支持属性、cdata 和类似数组的元素。
主要用途是将任何 XML API 响应转换为数组。DomToArray 使用了古老的 PHP DOMDocument 对象。XML API 响应是字符串,可以完美地加载到 DOMDocument 中,使用 vaclavvanik/dom-loader。
安装
您可以通过 composer 安装此软件包。
composer require vaclavvanik/dom-to-array
使用方法
简单传递 DOMDocument
<?php declare(strict_types=1); use DOMDocument; use VaclavVanik\DomToArray; $doc = new DOMDocument(); $doc->loadXML('<root/>'); $result = DomToArray::toArray($doc); // $result = ['root' => ''];
数组元素
具有相同名称的多个元素将创建多维数组。
<root> <name>guy collection</name> <good_guy> <name>Luke Skywalker</name> <weapon>Lightsaber</weapon> </good_guy> <good_guy> <name>Gandalf</name> <weapon>Staff</weapon> </good_guy> <bad_guy> <name>Saruman</name> <weapon>Staff</weapon> </bad_guy> <bad_guy> <name>Sauron</name> <weapon>Ring</weapon> </bad_guy> </root>
这将产生以下结果
$result = [ 'root' => [ 'name' => 'guy collection', 'good_guy' => [ [ 'name' => 'Luke Skywalker', 'weapon' => 'Lightsaber', ], [ 'name' => 'Gandalf', 'weapon' => 'Staff', ], ], 'bad_guy' => [ [ 'name' => 'Saruman', 'weapon' => 'Staff', ], [ 'name' => 'Sauron', 'weapon' => 'Ring', ], ], ], ];
属性
元素属性创建键 => 值,例如 element_name@attribute_name => attribute_value
<root attr="val"> <single type="any"/> <collection type="any1"/> <collection type="any2"/> <author lang="English">Tolkien</author> <guy lang="Black Speech"> <name weapon="Ring">Sauron</name> <weapon>Ring</weapon> </guy> <guy lang="Elvish"> <name weapon="Staff">Gandalf</name> <weapon>Staff</weapon> </guy> <bad_guy lang="Unknown"> <name weapon="Staff">Saruman</name> <name weapon="Ring">Sauron</name> </bad_guy> </root>
这将产生以下结果
$result = [ 'root' => [ 'single' => '', 'single@type' => 'any', 'collection' => [ ['collection@type' => 'any1'], ['collection@type' => 'any2'], ], 'author' => 'Tolkien', 'author@lang' => 'English', 'guy' => [ [ 'name' => 'Sauron', 'name@weapon' => 'Ring', 'weapon' => 'Ring', 'guy@lang' => 'Black Speech', ], 'name' => 'Gandalf', 'name@weapon' => 'Staff', 'weapon' => 'Staff', 'guy@lang' => 'Elvish', ], ], 'bad_guy' => [ [ 'name' => 'Saruman', 'name@weapon' => 'Staff', ], [ 'name' => 'Sauron', 'name@weapon' => 'Ring', ], ], 'bad_guy@lang' => 'Unknown', ], 'root@attr' => 'val', ];
Cdata
Cdata 转换与元素文本内容相同。
<root> <good_guy> <name><![CDATA[<h1>Gandalf</h1>]]></name> <weapon>Staff</weapon> </good_guy> </root>
这将产生以下结果
$result = [ 'root' => [ 'good_guy' => [ 'name' => '<h1>Gandalf</h1>', 'weapon' => 'Staff', ], ], ];
DomOptions
有时只处理元素(不需要属性)是有用的。
<?php declare(strict_types=1); use DOMDocument; use VaclavVanik\DomToArray; $domOptions = DomOptions::fromArray([DomOptions::SKIP_ATTRIBUTES => true]); $result = DomToArray::toArrayWithOptions($doc, $domOptions);
<root attr="val"> <single type="any"/> <collection type="any1"/> <collection type="any2"/> <author lang="English">Tolkien</author> <guy lang="Black Speech"> <name weapon="Ring">Sauron</name> <weapon>Ring</weapon> </guy> <guy lang="Elvish"> <name weapon="Staff">Gandalf</name> <weapon>Staff</weapon> </guy> <bad_guy lang="Unknown"> <name weapon="Staff">Saruman</name> <name weapon="Ring">Sauron</name> </bad_guy> </root>
这将产生以下结果
$result = [ 'root' => [ 'single' => '', 'collection' => ['', ''], 'author' => 'Tolkien', 'guy' => [ [ 'name' => 'Sauron', 'weapon' => 'Ring', ], [ 'name' => 'Gandalf', 'weapon' => 'Staff', ], ], 'bad_guy' => [ 'name' => ['Saruman', 'Sauron'], ], ], ];
运行检查 - 编码规范和 php-unit
安装依赖项
make install
运行检查
make check
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。