baraja-core / xml-to-php-array
该包的最新版本(v2.1.1)没有提供许可证信息。
XML到PHP数组转换器
v2.1.1
2022-09-12 07:35 UTC
Requires
- php: ^8.0
- ext-dom: *
Requires (Dev)
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.0
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-nette: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- roave/security-advisories: dev-master
- spaze/phpstan-disallowed-calls: ^2.0
This package is auto-updated.
Last update: 2024-09-12 11:51:56 UTC
README
智能工具,将您的XML转换为PHP数组。
这是从gaarf/XML-string-to-PHP-array分支出来的。
安装和使用
使用Composer
composer require baraja-core/xml-to-php-array
然后包将自动安装到您的项目中,您可以简单调用
$resultArray = Convertor::covertToArray($xml);
文档
在PHP工作中,一个常见的需求是将XML文档转换为可序列化的数组。如果您尝试过序列化()和反序列化() SimpleXML或DOMDocument对象,您就了解我在说什么。
假设以下XML片段
<tv> <show name="Family Guy"> <dog>Brian</dog> <kid>Chris</kid> <kid>Meg</kid> </show> </tv>
有一种快速且简陋的方法可以将此类文档转换为数组,使用类型转换和JSON函数以确保在反序列化时没有导致问题的奇特值
$a = json_decode(json_encode((array) Convertor::covertToArray($s)), true);
以下是我们的示例XML的结果,例如,如果我们print_r($a)
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
)
)
)
非常酷,对吧?但也许我们想要嵌入一些HTML标签或类似的东西。那么我们需要一个CDATA节点…
<tv> <show name="Family Guy"> <dog>Brian</dog> <kid>Chris</kid> <kid>Meg</kid> <kid><![CDATA[<em>Stewie</em>]]></kid> </show> </tv>
上面的XML片段会产生以下结果
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
[2] => Array
(
)
)
)
)
这并不很有用。我们遇到了麻烦,因为CDATA节点,一个SimpleXMLElement,被转换为一个数组而不是一个字符串。为了处理这种情况,同时仍然保持@attributes的简洁表示,我们需要一个稍微详细一些的转换函数。这是我的版本,在此以“做任何事但不要告我”的许可证发布。
对于我们的Stewie片段的结果
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
[2] => <em>Stewie</em>
)
)
)
胜利属于我! :D