mblarsen/array-xml
Composer 安装命令:
composer require mblarsen/array-xml
包简介
A simple yet expressive array syntax for building XML files
README 文档
README
Because DOMDocument and SimpleXML sucks
- Easily build XML with associative arrays
- Succinct syntax for naming child elements, adding attributes, and more
- You can combine with
DOMDocumentif you really have to
Examples
- Easy to create attributes
- Children takes name from parent by default
ArrayToXML::toXML( 'Order@version=2.0' => [ 'ID@type=SKU' => 1234, 'Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ] );
Yields:
<?xml version="1.0"?> <Order version="2.0"> <ID type="SKU">1234</ID> <Lines> <Line> <item>ABC</item> <qty>3</qty> </Line> <Line> <item>DEF</item> <qty>1</qty> </Line> </Lines> </Order>
- Using
|you can specify a differnt name of the children
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, 'Lines|OrderLine' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ] );
Yields:
<?xml version="1.0"?> <Order> <ID>1234</ID> <Lines> <OrderLine> <item>ABC</item> <qty>3</qty> </OrderLine> <OrderLine> <item>DEF</item> <qty>1</qty> </OrderLine> </Lines> </Order>
- Using
name_mappersyou can use, index and child values to construct the child element name and attributes
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, 'Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ], [ 'name_mappers' => [ 'Line' => function ($name, $index, $value) { return $name . '@number=' . ($index + 1); } ] ] );
Yields:
<?xml version="1.0"?> <Order> <ID>1234</ID> <Lines> <Line number="1"> <item>ABC</item> <qty>3</qty> </Line> <Line number="2"> <item>DEF</item> <qty>1</qty> </Line> </Lines> </Order>
- "Flatten" the parent element and put its children in its place using
<.
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, // Node names will be 'Line' '<Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ], // Node name will be 'Lines' // (some XSDs actually pluralize 'things' 🤦) '<Foo|Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ], ], );
Yields:
<?xml version="1.0"?> <Order> <ID>1234</ID> <Line> <item>ABC</item> <qty>3</qty> </Line> <Line> <item>DEF</item> <qty>1</qty> </Line> <Lines> <item>ABC</item> <qty>3</qty> </Lines> <Lines> <item>DEF</item> <qty>1</qty> </Lines> </Order>
- Some parts are hard to model using arrays so you can "patch" with a
DOMDocument
$complex_dom = ...; ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, '<complexdom' => $complexdom ], );
Yields:
<?xml version="1.0"?> <Order> <ID>1234</ID> <Line number="1"> <item>ABC</item> <qty>3</qty> </Line> <LineComment>Wrap well</LineComment> <Line number="2"> <item>DEF</item> <qty>1</qty> </Line> <LineComment/> </Order>
- Namespaces are just part of the name + an attribute on the root element.
ArrayToXML::toXML( 'Order@ns=...@ecom=...' => [ 'ns:ID' => 1234, '<ecom:Lines' => [ ['ecom:item' => 'ABC', 'ecom:qty' => 3], ['ecom:item' => 'DEF', 'ecom:qty' => 1], ] ], );
Yields:
<?xml version="1.0"?> <ns:Order ns="..." ecom="..."> <ns:ID>1234</ns:ID> <ecom:Line number="1"> <ecom:item>ABC</ecom:item> <ecom:qty>3</ecom:qty> </ecom:Line> <ecom:Line number="2"> <ecom:item>DEF</ecom:item> <ecom:qty>1</ecom:qty> </ecom:Line> </ns:Order>
- In cases you need a
DOMDocumentusetoDOM
ArrayToXML::toDOM( 'Order' => [ 'ID' => 1234, 'Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ] );
- lets you set the version and encoding of the XML
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, 'Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ], [ 'version' => '1.2', 'encoding' => 'utf8' ] );
Yields:
<?xml version="1.2" encoding="utf8"?> <Order> <ID>1234</ID> <Lines> <Line> <item>ABC</item> <qty>3</qty> </Line> <Line> <item>DEF</item> <qty>1</qty> </Line> </Lines> </Order>
- Setting
declareto false will exclude the XML declaration at the top
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, 'Lines' => [ ['item' => 'ABC', 'qty' => 3], ['item' => 'DEF', 'qty' => 1], ] ], [ 'declare' => false ] );
Yields:
<Order> <ID>1234</ID> <Lines> <Line> <item>ABC</item> <qty>3</qty> </Line> <Line> <item>DEF</item> <qty>1</qty> </Line> </Lines> </Order>
- Conveniently create CDATA
ArrayToXML::toXML( 'Order' => [ 'ID' => 1234, 'Comment' => 'cdata:foo', ] );
Yields:
<?xml version="1.0"?> <Order> <ID>1234</ID> <Comment><![CDATA[foo]]></Comment> </Order>
mblarsen/array-xml 适用场景与选型建议
mblarsen/array-xml 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9 次下载、GitHub Stars 达 1, 最近一次更新时间为 2019 年 11 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 mblarsen/array-xml 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mblarsen/array-xml 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 9
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-11-21